2011-05-31 19 views
36

這可能是一個愚蠢的問題! (對的n00b和AutoMapper時間短!)我需要兩種方式創建automapper createmap嗎?

我想使用AutoMapper從EF4實體視圖模型類映射。

1)如果我打電話

CreateMap<ModelClass, ViewModelClass>() 

然後我還需要調用

CreateMap<ViewModelClass, ModelClass>() 

進行反向?

2)如果兩個類具有相同的屬性名稱,然後我需要一個CreateMap聲明可言,或者這只是針對「特定/自定義」映射?

+5

使用'CreateMap ().ReverseMap()'與所有鏈接的裁剪將節省您一些擊鍵 - 請參閱http://stackoverflow.com/questions/13490456/automapper-bidirectional-mapping-with-reversemap-and -formember – drzaus 2014-07-23 18:19:28

回答

12

在AutoMapper你有一個源類型和目標類型。因此,只有具有相應的CreateMap時,才能在此Source類型和Destination類型之間進行映射。因此,要回答你的問題:

  1. 你不需要定義反向映射。只有當你打算回映時,你才必須這樣做。
  2. 是的,你需要調用CreateMap表明,這些類型可映射否則將引發異常,當你調用Map<TSource, TDest>告訴你,映射不將源和目標類型之間存在。
+0

我知道這不是提問的地方。通常我使用AutoMapper來啓動一個使用DTO的實體對象,並且DTO是我在客戶端應用程序中使用的唯一模型。我的問題是關於從數據庫中讀取數據的問題,那時候我有一個應該啓動DTO模型的實體模型集合。我是否需要創建另一個反向映射? – saber 2013-01-11 17:07:03

+0

@saber是的。我的意思是這就是我所做的,除非有人證明相反。 – 2015-08-04 04:55:06

+0

問題仍然存在,爲什麼我們必須調用'CreateMap'?迫使我手動指定映射不是真實的東西整個「汽車」的一部分... – Slight 2016-04-29 23:10:15

8

我使用的擴展方法做映射兩種方式

public static IMappingExpression<TDestination, TSource> BothWays<TSource, TDestination> 
     (this IMappingExpression<TSource, TDestination> mappingExpression) 
    { 
     return Mapper.CreateMap<TDestination, TSource>(); 
    } 

用法:

CreateMap<Source, Dest>().BothWays(); 
+3

我覺得這個擴展已經爲'.ReverseMap()存在''即CreateMap ().ReverseMap()'所看到[here](http://stackoverflow.com/a/18490071/1037948)...和我剛剛注意到[下面的答案](http://stackoverflow.com/a/11673804/1037948) – drzaus 2014-07-23 18:15:22

+0

我認爲ReverseMap是在2012年2月之後添加的。 – Brian 2014-07-23 19:42:09

+0

也許,我剛剛通過2011年11月的[提交時間戳](https://github.com/AutoMapper/AutoMapper/commit/bff6e2aa49af3e7b50f527376da48924efa7d81e) – drzaus 2014-07-24 17:23:12

96

對於在這個問題誰絆倒人的信息。在CreateMap()配置鏈的末尾添加一個.ReverseMap()調用,現在似乎有一種內置的方法來實現反向映射。

+3

顯然它包含了[幾個月第一個答案後](https://github.com/AutoMapper/AutoMapper/commit/bff6e2aa49af3e7b50f527376da48924efa7d81e) – drzaus 2014-07-23 18:18:01

+0

下面是示例https://dotnetfiddle.net/0x8csL – Sergey 2016-01-13 00:34:42

相關問題