2012-12-12 45 views
1

產生的動態代理我不能得到這個工作:映射到目的地時實際目標類型是由實體框架

Mapper.CreateMap<Source, Destination>(); 

var context = new MyDbContext(); 

var source = new Source(); 
var destination= context.Destinations.First(); 

Mapper.Map<Source, Target>(source, destination) 

拋出:AutoMapper.AutoMapperMappingException:缺少類型映射配置或不支持的映射。

這工作:

Mapper.CreateMap<Source, Destination>(); 

var source = new Source(); 
var destination= new Destination(); 

Mapper.Map<Source, Target>(source, destination) 

實體框架是創建一個動態代理類我Destination類的原因,它不工作?

沒有目標參數它的工作原理,以及即:

var destination = Mapper.Map<Source, Target>(source); 
+0

好吧,所以它不是那麼簡單。我創建了一個單獨的項目來測試它。它在那裏有效。但是我發現ef不爲這個項目創建動態代理。這可能是區別嗎?如何確定何時使用代理而不是? 'Configuration.ProxyCreationEnabled'設置爲true。 – mollwe

+0

確保您的POCO對象的所有屬性都是虛擬的。 – Sascha

+0

這與它沒有任何關係。是的,它需要是虛擬的,以便代理類可以覆蓋屬性和延遲加載導航屬性,但我可以在不使用EF的情況下複製此異常。使用automapper更新現有對象時,目標類型必須與目標對象的類型完全相同,但子類是不夠的。在我的答案下面! – mollwe

回答

1

這是一個錯誤,它固定在AutoMapper的開發分支上。 AutoMapper的預發佈版本已經修復,或者等待2.2.1版本的發佈。

0

這樣的原因是EF創建代理。當子類用作目的地時發生異常。看來目標類型必須與CreateMap<>中定義的類型完全相同,派生類型不起作用。

DynamicMap<>似乎工作,所以我可能會使用它。