使用 AutoMapper 映射未知类型

2023-11-23

我在用着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

我真的不明白问题是什么,我能做些什么来解决它?


您需要使用非泛型重载Map:

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

原因是您当前使用的通用版本不使用您传递的实例的运行时类型。相反,它使用编译时类型 - 以及编译时类型item is object因为这是的返回值Activator.CreateInstance.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AutoMapper 映射未知类型 的相关文章

随机推荐