2013-02-18 457 views
7

我使用AutoMapper複製一個對象的另一個屬性:這是我的代碼:使用AutoMapper映射未知類型

// Get type and create first object 
Type itemType = Type.GetType(itemTypeName); 
var item = Activator.CreateInstance(itemType); 

// Set item properties 
.. Code removed for clarity .. 

// Get item from Entity Framework DbContext 
var set = dataContext.Set(itemType); 
var itemInDatabase = set.Find(id); 
if (itemInDatabase == null) 
{ 
    itemInDatabase = Activator.CreateInstance(itemType); 
    set.Add(itemInDatabase); 
} 

// Copy item to itemInDatabase 
Mapper.CreateMap(itemType, itemType); 
Mapper.Map(item, itemInDatabase); 

// Save changes 
dataContext.SaveChanges(); 

的問題是,Mapper.Map()拋出一個AutoMapperMappingException

Missing type map configuration or unsupported mapping. 

Mapping types: 
Object -> MachineDataModel 
System.Object -> MyProject.DataModels.MachineDataModel 

Destination path: 
MachineDataModel 

Source value: 
MyProject.DataModels.MachineDataModel 

我真的不明白問題是什麼,我能做些什麼來解決它?

回答

10

您需要使用的Map非泛型重載:

Mapper.Map(item, itemInDatabase, item.GetType(), itemInDatabase.GetType()); 

的原因是,目前正在使用的普通版本不使用你通過實例的運行時類型。相反,它使用編譯時類型 - 編譯時間類型itemobject,因爲這是返回值Activator.CreateInstance

+0

哈哈,我要告訴你切換參數的順序,但你太快了。但它像一個魅力!我會盡快接受你的回答。 – Joel 2013-02-18 15:32:45

+0

@Joel:是的,我先寫下相關部分,然後查找正確的順序:) – 2013-02-18 15:34:00