2012-01-26 33 views
0

我有設置了一個多到許多關係的兩個實體:實施IEntityWithRelationships導致相關對象停止加載

類別:

public class Category : IEntityWithRelationships 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id { get; set; } 

     public virtual ICollection<User> Users { get; set; } 

     //Json.NET needs this in order to serialize the object 
     private RelationshipManager rm; 
     RelationshipManager IEntityWithRelationships.RelationshipManager 
     { 
      get 
      { 
       if (rm == null) 
        rm = RelationshipManager.Create(this); 

       return rm; 
      } 
     } 
    } 

和用戶:

public class User 
    { 

     public int Id { get; set; } 

     public ICollection<Category> Categories { get; set; } 
    } 

相關對象加載正常,但我需要將類別對象序列化爲Json和Json.Net不斷拋出:

無法序列化RelationshipManager對象。當RelationshipManager屬於未實現IEntityWithRelationships的 實體對象時,無法序列化此類型的 對象。

所以我實現了IEntityWithRelationships接口,但現在我的相關對象沒有加載。

我試過一個自定義ContractResolver,但我仍然得到上述異常。我怎樣才能讓我的相關對象加載?

回答

1

您不能在EF類中擁有該接口,因爲EF將不會創建代理=>Lazy loading處於關閉狀態。 http://msdn.microsoft.com/en-us/library/dd468057.aspx。其實人們建議關閉LazyLoading當你必須序列化你的實體(當然實現這個接口是不正確的做法)。您應該準備好更多關於如何在序列化中使用EntityFramework

0

您不應該在代碼優先實體中實現該接口。實現該接口違反了POCO。它是「重型」EF實體所使用的接口,通過使用它,您將忽略EF如何處理POCO。

我想你爲什麼要這樣做的唯一原因是循環引用的問題。您應該能夠solve it而不指定任何API特定的接口。