2012-01-17 239 views
0

加載導航性能我有OrderItem一堆這樣的特性:實體框架4.1。從IDS

 public virtual Frame Frame { get; set; } 
     [ForeignKey("Frame")] 
     public int? FrameId { get; set; } 

我有一個這樣的控制器:

public ActionResult CostOptions(OrderItem oi) 

我用的模型綁定設置標識上oi上面,現在有沒有辦法讓導航屬性從Ids自動加載?我是否需要插入實體來執行此操作?

回答

1

OrderItem必須是由EF創建的代理,以便加載相關ID指向的導航屬性。您當前的實現不允許這樣做,因爲MVC模型綁定器創建實例OrderItem

public ActionResult CostOptions() 
{ 
    // creates instance of the proxy 
    var oi = db.OrderItems.Create(); 

    if (TryUpdateModel(oi)) 
    { 
      // new entity has to be added before retrieving lazy loaded prop 
      db.OrderItems.Add(oi); 
      // lazy loaded property 
      var frame = oi.Frame; 
    } 
} 
+0

謝謝,但在我的情況下,oi還沒有在數據庫中。如果可能,我寧願不在此階段插入它。 – Tom 2012-01-17 06:09:57

+1

@Tom編輯我的答案。在訪問導航屬性之前,您需要使用「創建」方法創建實例並將其添加到「DbSet」。 – Eranga 2012-01-17 06:15:27

+0

非常感謝。這工作。你是男人。 – Tom 2012-01-17 06:56:06