2013-02-18 45 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

+0

@ जोएल: हाँ, मैंने पहले प्रासंगिक भागों को लिखा था और फिर सही क्रम को देखा :) –

संबंधित मुद्दे