2011-03-21 152 views
11

我使用Automapper將數據從對象A傳遞到對象BAutomapper:部分映射

classe ObjectA 
{ 
    string Title; 
    string Summary; 
} 

classe ObjectB 
{ 
    string Title; 
    string Summary; 
    IAddress Address; 
} 

我創造了這種映射的兩個對象

AutoMapper.Mapper.CreateMap<IObectA, IObjectB>() 
     .ForMember(dest => dest.Title,   src => src.MapFrom(s => s.Title)) 
     .ForMember(dest => dest.Summary,   src => src.MapFrom(s => s.Summary)) 
     .ForMember(dest => dest.Address,   src => src.Ignore()) 

創建我的對象B,並填寫之間的所有物業包括地址

當我打電話的映射器,我期待它覆蓋標題和摘要,並忽略地址

ObjectB = Mapper.Map<IObjectA, IObjectB>(objectA); 

實際上,它是引發和地址異常。

我在做什麼錯?

[更新] 爲了表達不同,我有我的objectB,我想用來自ObjectA的數據更新它的一部分。當我說Ignore時,我的意思是將數據保留爲已有的數據

+0

這可能是知道你收到什麼異常有用... – JoDG 2011-03-21 08:00:55

+0

好像你正在做的一切錯誤。您的代碼示例顯示了兩次ObjectA的類定義。稍後你會說你填充了ObjectB的所有屬性,但是在最後一個代碼片段中,它顯示你正試圖將objectA映射到objectB,而不是相反。 – JoDG 2011-03-21 08:17:53

+0

@JoDG,我的錯誤。我更新了我的初始帖子。 拋出一個'System.Collections.Generic.KeyNotFoundException'類型的異常 – user385411 2011-03-21 08:39:11

回答

31

我找到了解決方案。

我剛剛發現Map方法有一個重載版本,除了預先實例化的目標對象。 由於這個article

Mapper.Map<IObjectA, IObjectB>(objectA, ObjectB); 

@JoDG,謝謝您的幫助

+3

鏈接到的文章不存在了... :( – noocyte 2013-03-08 08:09:22

+1

@noocyte:Archive.org有你的back!http://web.archive.org/web/20130124102758/http://www.dominicpettifer.co.uk/Blog/45/automapper---a-custom-type-converter-that-exposes-a-目標值 – 2013-07-02 18:33:52

+3

就像一個註釋,您不需要指定<>中的類型 Mapper.Map(objectA,ObjectB); 應該足夠了 – DomenicDatti 2013-10-08 17:41:00