簡體   English   中英

將DTO映射到Entity AutoMapper時如何解決創建循環依賴關系

[英]How to fix when mapping DTO to Entity AutoMapper creates circular dependency

我有一個數據庫層次結構,如:在工作表和設備之間是一對一的關系。 當我嘗試將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由於提供的錯誤而無法上載工作表。

工作表和設備具有一對一的映射關系,但是選擇要在獲取工作表時是否要加載設備,反之亦然。

將虛擬機僅保留在一個位置,它將不會嘗試加載,也不會創建循環依賴項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM