【发布时间】:2019-12-21 23:39:29
【问题描述】:
我有一个数据库层次结构,例如:工作表和设备之间是一对一的关系。当我尝试将 WorksheetDto 映射到 Worksheet 时,AutoMapper 通过 Worksheet 和 Device 进行循环依赖。
我在解决方案之后进行了很多搜索,我发现我必须忽略设备的工作表参考。 (我的意思是 Device.Worksheet)
实体和 DTO:
public class Worksheet : EntityBase
{
public virtual Device Device { get; set; }
}
public class WorksheetDto : EntityBaseDto
{
public virtual DeviceDto Device { get; set; }
}
public class Device : EntityBase
{
public virtual Worksheet Worksheet { get; set; }
}
public class DeviceDto : EntityBaseDto
{
public virtual WorksheetDto Worksheet { get; set; }
}
AutoMapper 配置:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Device, DeviceDto>();
.ForMember(w => w.Worksheet, map => map.Ignore())
.PreserveReferences()
.ReverseMap();
});
当我这样使用它时,什么也没有发生并得到以下错误:
System.InvalidOperationException: 'Multiplicity constraint violated. The role 'Worksheet_Device_Target' of the relationship 'RMDApp.DataLayer.Worksheet_Device' has multiplicity 1 or 0..1.'
所以总结就是我在调试的时候毕竟可以看到循环依赖。因此 EF 无法上传 Worksheet,因为它提供了错误。
【问题讨论】:
-
对于 AM 部分,不再需要
PreserveReferences。您可以更新到最新版本以防万一。
标签: c# entity-framework mapping automapper