簡體   English   中英

如何使用自動映射器將多對多映射

[英]How mapping many to many with automapper

我對表功能和角色有很多關系,並且我與關聯表RolesFunctions相關。 在RolesFunctions中,我具有行ID(IdFunctions和IdRoles兩者都是主鍵)。 問題是,當我將具有functionDTO的功能和具有RoleDTO的角色與AutoMapper進行映射時,出現此錯誤“ AutoMapper.dll中發生了'System.StackOverflowException類型的未處理的異常。請確保您沒有無限循環或無限遞歸。”

我的映射:

CreateMap<Function, FunctionTDTO>().ReverseMap();
CreateMap<Roles, RolesDTO>().ReverseMap();

自動映射器如何映射多對多關系?

功能分類

public class Functions
    {
        public Functions()
        {
            this.Roles = new HashSet<Roles>();
        }
        public int Id { get; set; }
        public string Description { get; set; }
        public virtual ICollection<Roles> Roles { get; set; }
    }

功能DTO

public class FunctionsDTO
    {
        public int Id { get; set; }
        public string Description { get; set; }
        public virtual ICollection<RolesDTO> Roles { get; set; }
    }

角色分類

public class Roles
    {
        public Roles()
        {
            this.Functions = new HashSet<Functions>();
        }
        public int Id { get; set; }
        public string Libelle { get; set; }
        public virtual ICollection<Functions> Functions { get; set; }
    }

RoleDTO類

public class RolesDTO
    {
        public int Id { get; set; }
        public string Libelle { get; set; }
        public virtual ICollection<FunctionsDTO> Functions { get; set; }
    }

在一個DTO中引用第二個DTO並不是一個好習慣,因為這會引起很多麻煩(例如,這會引起麻煩)。 您應該根據用例制作DTO。 例如:

public class FunctionsDTO
{
    public int Id { get; set; }
    public string Description { get; set; }
    public virtual ICollection<RolesDTO> Roles { get; set; }
}

當只需要使用Roles.Libelle時(例如在顯示或創建時),則應使用以下DTO:

public class FunctionsCreateDTO
{
    public int Id { get; set; }
    public string Description { get; set; }
    public virtual ICollection<string> RoleLibelles { get; set; }
}

然后只需更改您的映射。

暫無
暫無

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

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