Если я хочу сделать двунаправленное сопоставление, нужно ли мне создавать два сопоставления?
Mapper.CreateMap<A, B>() and Mapper.CreateMap<B, A>()
?
Если я хочу сделать двунаправленное сопоставление, нужно ли мне создавать два сопоставления?
Mapper.CreateMap<A, B>() and Mapper.CreateMap<B, A>()
?
Да, потому что если вы измените тип какого-либо свойства (например, DateTime -> строка), оно не будет двунаправленным (вам нужно будет указать 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();
Теперь это встроено в AutoMapper.
Mapper.CreateMap<SourceType, DestType>().ReverseMap();
ReverseMap
, вызванный IMappingExpression<SourceType, DestType>
, возвращает IMappingExpression<DestType, SourceType>
, поэтому затем можно определить обратное пользовательское сопоставление. Я перемещаю это как новый принятый ответ.
- person Bondolin; 27.02.2020
Отличная идея Эрик! Я добавил возвращаемое значение, так что обратное отображение тоже можно настроить.
public static class AutoMapperExtensions
{
public static IMappingExpression<TDestination, TSource> Bidirectional<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression)
{
return Mapper.CreateMap<TDestination, TSource>();
}
}