1

我已經manay一對多的兩個實體之間的關係:分類< - >產品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與Json.Encode * .cshtml();

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

,因爲我已經禁用延遲加載在性能水平,我不希望它在任何時間點裝載所有嵌套實體(循環引用)。有沒有辦法加載所有相關的一級記錄,即類別和相關項目。

Related question - 但Iodon't不想去任何建議的兩種方式。

注意:我更感興趣知道爲什麼EF的行爲如此。這對我來說似乎是一個錯誤。

+0

檢查答案,並告訴我,如果這有助於你。 –

+0

你應該用Json.Net替換json序列化器並設置參考循環處理。 –

回答

0

第一種方法:你可以添加屬性上述屬性,你不想使用[ScriptIgnore]正在連載排除它,你可以創建部分類,並添加您的自定義,如果你的實體是自動生成的

第二種方法:創建只有性能的型號,你在你的觀點需要,並僅選擇這個模型,並設置你的屬性

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

這種方法沒有什麼問題,但我不希望這樣做,因爲我期待EF框架本身的一些修復。 – RollerCosta

0

一個解決辦法,請不要殺我:-)後加載對象和序列化之前,只需設置加載導致對的循環引用的對象。我嘗試了它,並像魅力一樣工作。