11

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

何が問題なのかよくわかりません。修正するにはどうすればよいですか?

4

1 に答える 1

16

の非ジェネリック オーバーロードを使用する必要がありますMap

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

その理由は、現在使用しているジェネリック バージョンが、渡したインスタンスのランタイム タイプを使用していないためです。むしろ、コンパイル時の型を使用します - のコンパイル時の型itemobject、それが の戻り値であるためですActivator.CreateInstance

于 2013-02-18T15:28:00.993 に答える