2011-04-07 23 views
4

我試圖返回JSON完全深對象(與所有外鍵關係填充),但我得到所有引用對象的空值。如何使用代碼優先實體框架獲取完整對象4.1

這裏是調用來獲取該對象:

public ActionResult GetAll() 
    { 
     return Json(ppEFContext.Orders, JsonRequestBehavior.AllowGet); 
    } 

,這裏是訂單對象本身:

public class Order 
{ 
    public int Id { get; set; } 

    public Patient Patient { get; set; } 

    public CertificationPeriod CertificationPeriod { get; set; } 

    public Agency Agency { get; set; } 

    public Diagnosis PrimaryDiagnosis { get; set; } 

    public OrderApprovalStatus ApprovalStatus { get; set; } 

    public User Approver { get; set; } 

    public User Submitter { get; set; } 

    public DateTime ApprovalDate { get; set; } 

    public DateTime SubmittedDate { get; set; } 
    public Boolean IsDeprecated { get; set; } 
} 

我還沒有找到一個很好的資源使用EF 4.1註解。如果你能提出一個好的答案,那就有答案,你可以給我這個鏈接,這對我來說就足夠了!

問候,

圭多

更新

我加入了虛擬關鍵字按薩克斯曼,我現在 處理循環引用 錯誤的問題。

+0

看看這裏:http://stackoverflow.com/questions/4251794/how-to-have-many-to-many-association-in-entity-framework-code-first什麼類型的Enumerable是OrderApprovalStatus等 – 2011-04-07 18:07:14

回答

2

添加virtual關鍵字:

public class Order 
{ 
    public int Id { get; set; } 

    public virtual Patient Patient { get; set; } 

    public virtual CertificationPeriod CertificationPeriod { get; set; } 

    public virtual Agency Agency { get; set; } 

    public virtual Diagnosis PrimaryDiagnosis { get; set; } 

    public virtual OrderApprovalStatus ApprovalStatus { get; set; } 

    public virtual User Approver { get; set; } 

    public virtual User Submitter { get; set; } 

    public DateTime ApprovalDate { get; set; } 

    public DateTime SubmittedDate { get; set; } 
    public Boolean IsDeprecated { get; set; } 
} 

你可能最終得到一個A circular reference was detected while serializing an object...錯誤,如果你的對象有對方的引用。在這種情況下,您需要創建一個ViewModel或類似的東西來解決這個問題。或者使用LINQ來投影一個匿名對象。

+0

這取得了進展,但現在我在你描述的地方。帶有循環引用異常。我正在閱讀有關將外來對象的id添加到模型和其他解決方案的信息。 – 2011-04-07 19:00:17

+0

目前你還不能做太多的工作,使用引用另一個對象的對象序列化是不可能的。就像我建議的那樣,您可以創建一個只包含您需要的數據的ViewModel,或者投影到匿名對象,例如:http://stackoverflow.com/questions/4436328/how-do-i-avoid-a-圓形基準而串行化實體框架級 – Saxman 2011-04-07 21:47:22

2

閱讀您的相關實體前約Loading Related Objects

+0

我的第一個想法是查看延遲加載。 – 2011-04-07 19:12:15

+0

是的,但是如果你總是需要加載每一個引用的屬性,明確地寫入包含每個負載並不舒服,也許還有另一種方法來配置延遲加載 – archil 2011-04-07 19:45:05