2013-02-18 8 views
7

che sto usando AutoMapper per copiare le proprietà di un oggetto a un altro: Questo è il mio codice:Utilizzando automapper per mappare i tipi sconosciuti

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

Il problema è che Mapper.Map() genera 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 

Non capisco veramente quale sia il problema, e cosa posso fare per risolverlo?

risposta

10

È necessario utilizzare l'overload non generico di Map:

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

Il motivo è che la versione generica che si sta utilizzando non usa il tipo di esecuzione delle istanze si passa. Piuttosto utilizza il tipo di tempo di compilazione - e il tipo di tempo di compilazione di item è object perché quello è il valore restituito di Activator.CreateInstance.

+0

Haha, stavo per dirti di cambiare l'ordine dei parametri, ma eri troppo veloce. Ma funziona come un fascino! Accetterò la tua risposta il prima possibile. – Joel

+0

@Joel: Sì, ho prima annotato le parti pertinenti e poi ho cercato l'ordine corretto :) –