2017-02-07 3 views
0

テーブルの関数とロールには多対多の関係があり、関連テーブルRolesFunctionsがあります。 RolesFunctionsには、行ID(IdFunctionsとIdRolesの両方がプライムキーです)があります。 問題は、私がfunctionDTOで関数をマップしているときに、AutoMapperでrolesDTOとロールを使用しています。このエラーがあります。 "AutoMapper.dllで 'System.StackOverflowException'型の未処理の例外が発生しました。無限ループまたは無限再帰"オートマッタで多対多にマッピングする方法

私のマッピング:

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

どのようautomapperマップ多くの多くの関係?

機能クラッセ

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

私たちに教えてくださいclass Function、FunctionDTO、Roles and RolesDTO – MacakM

答えて

0

1つのDTOで2番目のDTOを参照するのは、多くの問題を引き起こす(たとえばこれが原因で)ため、良い方法ではありません。ユースケースに基づいてDTOを作成する必要があります。たとえばに:あなたが唯一の(表示や作成中など)Roles.Libelleを使用する必要があるときは、例えば、このDTO作るべき

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

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

をそして、ちょうどあなたのマッピングを変更します。

関連する問題