2013-02-18 15 views
7

Używam AutoMapper skopiować właściwości jednego obiektu do drugiego: To jest mój kod:Korzystanie AutoMapper do mapowania nieznanych typów

// 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(); 

Problemem jest to, że Mapper.Map() zgłasza 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 

Nie bardzo rozumiem, na czym polega problem i co mogę zrobić, aby to naprawić?

Odpowiedz

10

Musisz użyć nierodzajową przeciążenie Map:

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

Powodem jest to, że generycznej wersji używasz nie użyć typu runtime przypadkach mijanych. Raczej używa czasu kompilacji - i typu kompilacji item jest object, ponieważ jest to wartość zwracana Activator.CreateInstance.

+0

Haha, zamierzałem ci powiedzieć, żebyś zmieniał kolejność parametrów, ale byłeś zbyt szybki. Ale działa jak urok! Przyjmuję twoją odpowiedź tak szybko, jak tylko mogę. – Joel

+0

@Joel: Tak, najpierw zapisałem odpowiednie części, a następnie sprawdziłem poprawne zamówienie :) –

Powiązane problemy