2010-03-13 260 views
19

如果我想進行雙向映射,是否需要創建兩個映射?AutoMapper雙向映射

Mapper.CreateMap<A, B>() and Mapper.CreateMap<B, A>()

回答

18

是的,因爲如果您更改某些屬性的類型(例如DateTime - >字符串)它不是雙向的(您將需要指示Automapper如何轉換字符串 - > DateTime)。

+0

有道理,但庫試圖做的映射作爲慣例這將是很好,你可以明確地禁用它,如果它不是加工。例如,我將域對象映射爲查看模型,雙向映射對我來說完全適用。 – 2012-01-17 17:26:36

52

是的,但如果你發現自己做這往往:

public static class AutoMapperExtensions 
{ 
    public static void Bidirectional<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression) 
    { 
     Mapper.CreateMap<TDestination, TSource>(); 
    } 
} 

則:

Mapper.CreateMap<A, B>().Bidirectional(); 
+0

謝謝。真的很酷 – Benny 2010-10-25 02:58:30

+0

很酷,謝謝:) – Marko 2011-10-27 10:51:21

+0

雖然這可能不會回答這個問題,但它肯定解決了潛在的問題 – hanzolo 2015-02-24 19:12:08

7

好主意埃裏克! 我已經添加了一個返回值,所以反向映射也是可配置的。

public static class AutoMapperExtensions 
{ 
    public static IMappingExpression<TDestination, TSource> Bidirectional<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression) 
    { 
     return Mapper.CreateMap<TDestination, TSource>(); 
    } 
} 
15

現在這烘焙成AutoMapper

Mapper.CreateMap<SourceType, DestType>().ReverseMap(); 
+0

只有屬性名稱在兩個類中相同時,這才適用於自定義映射。 – 2016-02-05 21:35:13