2017-02-25 9 views
-1

私のモデルスキーマは次のとおりです。efコアで依存エンティティを取得する方法は?

これは、依存エンティティ

public class ArticleFee 
{ 
    public int ID { get; set; } 
    public string Description { get; set; } 
    public Type Type { get; set; } 
    public double? FixedFee { get; set; } 
    public int? RangeStart { get; set; } 
    public int? RangeEnd { get; set; } 
    public double? Percentage { get; set; } 

    [StringLengthAttribute(1, MinimumLength = 1)] 
    public string ArticleLetter { get; set; } 
    public Article Article { get; set; } 
} 
public class Article 
    { 
     [DatabaseGenerated(DatabaseGeneratedOption.None)] 
     [KeyAttribute] 
     [StringLengthAttribute(1, MinimumLength = 1)] 
     public string Letter { get; set; } 
     public string Title { get; set; } 
     public string Description { get; set; } 

     public ICollection<ArticleFee> ArticleFees { get; set; } 
    } 

は、ここで私はちょうど空の配列を示し、私のルート上のデータが、ArticleFeesを表示する方法ですされています。

[HttpGetAttribute] 
    public IEnumerable<Article> Get() 
    { 
     return _context.Articles 
      .Include(a => a.ArticleFees) 
      .ToList(); 
    } 
+0

あなたの質問は? –

+0

関連エンティティまたは依存エンティティを取得してルートに表示するにはどうすればよいですか? – vnc

+0

反射(メタデータ)? –

答えて

1

お使いのモデルは良好です(*)とGet()メソッドもあります。あなたの問題は、ArticleArticleFeeを指し、ArticleFeeArticleを指しているため、JSONシリアル化中に無限ループが検出されることです。

問題を解決するには、そのようなループが検出されたときに「例外をスローする」のではなく「無視する」ようにアプリをStartup.csに設定する必要があります。 thisから.NETのコア内の溶液をSOに答える:

services.AddMvc().AddJsonOptions(options => { 
    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; 
}); ; 

あなたがファイルにusing Newtonsoft.Json;を追加する必要があります。

(*)あなたのTypeエンティティは問題ないと仮定します。

+0

これは問題になるかもしれませんが、もしそうなら、例外をスローし、空の配列を静かにシリアライズしません。また、参照ループを無視すると、配列は直列化されますが、要素内の後方参照は直列化されません。 –

関連する問題