繁体   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