Mam dwie odwzorowane klasy. Klasa źródłowa ma właściwość DateTime
, która jest mapowana do właściwości docelowej typu long
(DateTime.Ticks
), są to odpowiednio UpdateDt
i UpdateDtTicks
.Właściwość mapowania Automappera nieoczekiwanie według częściowej nazwy właściwości zgodnej z
Kiedy używam Automappera do odwzorowania tych dwóch klas, moja właściwość UpdateDtTicks
automatycznie pobiera wartość z właściwości UpdateDt
, mimo że nazwy właściwości nie są takie same i nie ustawiłem jawnie mapowania dla tej właściwości.
Czy Automapper ustawia właściwość automatycznie, ponieważ nazwy właściwości różnią się tylko na końcu? Jeśli nie, dlaczego tak się dzieje, ponieważ jest to nieoczekiwane zachowanie.
proszę zobaczyć poniższy kod:
static void Main(string[] args)
{
Configuration.Configure();
var person = new OrderDto
{
OrderId = 999,
MyDate = new DateTime(2015, 1, 1, 4, 5, 6)
};
var orderModel = Mapper.Map<OrderModel>(person);
Console.WriteLine(new DateTime(orderModel.MyDateTicks.Value));
Console.ReadLine();
}
public class OrderDto
{
public int OrderId { get; set; }
public DateTime MyDate { get; set; }
}
public class OrderModel
{
public int OrderId { get; set; }
public long? MyDateTicks { get; set; }
}
public class Configuration
{
public static void Configure()
{
Mapper.CreateMap<OrderDto, OrderModel>();
}
}
Wynik w konsoli:
i zegarka:
Domyślam się, że automapper szuka 'MyDate' w obiekcie docelowym znajdzie' 'MyDate' z Kleszcze 'postfiks i próbuje, jeśli' MyDate.Ticks' ma sens. W tym przypadku jest to całkowicie poprawne wyrażenie. Szukam tej funkcji w dokumentacji, ale wydaje się, że to, co się dzieje. Czy próbowałeś zmienić jego nazwę, na przykład na 'MyDateTiicks'? – MarioDS
Po prostu wypróbowałem 'MyDateTiicks' i nie został zmapowany. Próbowałem także 'MyDatesTicks' i również nie jest mapowany. Wygląda więc na połączenie nazwy właściwości i faktu, że 'Ticks' są w nazwie nieruchomości. –