1

Iましmanay対多の2つのエンティティ間の関係:カテゴリー< - >アイテムEF - すべてのネストされたエンティティをロードするために積極的なロードを防ぐためにどのように

public class CategoryMaster 
{ 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public virtual List<SubCategoryMaster> SubCategories { get; set; } 

    public List<ItemMaster> Items { get; set; } 
} 

public class ItemMaster 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 

    public List<CategoryMaster> Categories { get; set; } 
} 

私は明示的な負荷に関する項目にしようとするたびにすべての/特定のカテゴリ、それはこれらの項目に私にそれらのCAへ

  • 関連する項目を

    • すべての関連項目

    • 関連カテゴリーを与えますtegoriesなど...円形/ネストされた参照

      db.CategoryMaster 
           .Include(x=>x.Items) 
           .Include(x=>x.SubCategories.Select(y=>y.Items)) 
           .ToList(); 
      

    Json.Encode(持つ*の.cshtmlにJSONにそれをシリアル化しながら、従って以下のエラーになります)。私は、プロパティレベルでの遅延ロードを無効にしたので

    A circular reference was detected while serializing an object of type 'GoGreen.Data.Entities.SubCategoryMaster'. 
    

    、私はそれが時間の任意の時点で、すべてのネストされたエンティティ(循環参照)をロードするために期待していませんよ。関連するすべてのレベル1のレコード、つまりカテゴリおよび関連アイテムをロードする方法はありますか?

    Related question - しかし、Iodonは2つの方法のいずれかを提案したいと思っていません。

    :私はEFがこのように動作する理由を知ることにもっと興味があります。私にはバグがあるようです。

  • +0

    答えを確認し、それがあなたを助けたかどうかを教えてください。 –

    +0

    jsonシリアライザをJson.Netで置き換え、参照ループ処理を設定する必要があります。 –

    答えて

    0

    最初のアプローチ:あなたは[ScriptIgnore]を使用して直列化されることから、それを除外したくない性質上、属性を追加することができ、あなたは部分クラスを作成し、エンティティが

    第二のアプローチを自動生成している場合は、カスタマイズを追加することができます作成​​しますあなたのビューで必要なだけ、このモデルを選択して

    EFcontext.Tabel.include(x=>x...).Select(x=>new MyModel { ... }); 
    
    +0

    このアプローチには何も問題はありませんが、私はEFフレームワーク自体でいくつかの修正を期待しているので、これを行うことを好まないでしょう。 – RollerCosta

    0

    回避策の一つあなたの特性を設定し、ちょうどロードさを設定し、オブジェクトの読み込み後:-)とシリアライズする前に、私を殺すしないでくださいだけでプロパティを持つモデル循環参照を引き起こしているオブジェクトnull。私はそれを試して、魅力的に働いた。

    関連する問題