2017-02-07 20 views
0

У меня есть много-много отношений для функций и ролей таблиц, и у меня есть таблица сопоставлений RolesFunctions. В RolesFunctions у меня есть идентификатор строки (IdFunctions и IdRoles как его основной ключ). проблема - это когда я сопоставляю функцию с functionDTO и ролями с roleDTO с AutoMapper. У меня есть эта ошибка «Необработанное исключение типа« System.StackOverflowException »произошло в AutoMapper.dll. Убедитесь, что у вас нет бесконечного цикла или бесконечной рекурсии «.Как сопоставление многих ко многим с automapper

мое отображение:

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

Как automapper карта многие ко многим?

функция Classe

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; } 
    } 

Роль Classe

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 Classe

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

Показать классы, функцииDTO, Роли и ролиDTO – MacakM

ответ

0

Неправильная практика иметь ссылку в одном 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; } 
} 

А потом просто изменить Mapping ,