c# - 使用 AutoMapper 映射未知类型

标签 c# .net entity-framework 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

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

最佳答案

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

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

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

关于c# - 使用 AutoMapper 映射未知类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14939648/

相关文章:

c# - 在 Visual Studio 中添加对下载的 dll 的引用并在 Github 中解析

C# 和元数据文件错误

C# 在内存中编译并创建内存组件类型的实例

c# - MVC 绑定(bind)产品到订单

entity-framework - GroupBy 表达式无法翻译

c# - 调用 Sitefinity WCF Web 服务时出现错误 401

c# - 使用表达式树生成排序列表

.net - 是否有包含 RowVersion 值的 Microsoft.SqlServer.Management.Smo.SqlDataType 的替代方法?

.net - 与源代码安全和批处理文件的持续构建集成

sql-server - 如何向我的 EF4 模型添加计算列?