Если я хочу сделать двунаправленное сопоставление, нужно ли мне создать два отображения?Двунаправленное сопоставление AutoMapper
Mapper.CreateMap<A, B>() and Mapper.CreateMap<B, A>()
?
Если я хочу сделать двунаправленное сопоставление, нужно ли мне создать два отображения?Двунаправленное сопоставление AutoMapper
Mapper.CreateMap<A, B>() and Mapper.CreateMap<B, A>()
?
Да, поскольку если вы измените тип какого-либо свойства (например, DateTime -> string), оно не является двунаправленным (вам нужно указать Automapper, как преобразовать строку -> DateTime).
Да, но если вы оказываетесь это часто делают:
public static class AutoMapperExtensions
{
public static void Bidirectional<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
Mapper.CreateMap<TDestination, TSource>();
}
}
затем:
Mapper.CreateMap<A, B>().Bidirectional();
Отличная идея Эрика! Я добавил возвращаемое значение, поэтому также можно настроить обратное сопоставление.
public static class AutoMapperExtensions
{
public static IMappingExpression<TDestination, TSource> Bidirectional<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
return Mapper.CreateMap<TDestination, TSource>();
}
}
Это теперь запеченный в AutoMapper
Mapper.CreateMap<SourceType, DestType>().ReverseMap();
Это не работает с пользовательскими сопоставлениями, только когда имена свойств одинаковы в обоих классах. –
Имеет смысл, но было бы неплохо это библиотека Пыталась сделать отображение в качестве конвенции, и вы можете явно отключить его, если он не был за работой. Например, я сопоставляю объекты домена для просмотра моделей, и двунаправленное сопоставление будет отлично работать для меня. –