[英]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.