![](/img/trans.png)
[英]Lazy loading of related entities not working with Entity Framework 4.1
[英]Entity Framework is lazy loading related entities when nav properties are not accessed
我正在嘗試使用 EF 5 (4.4) 調試舊 MVC 應用程序的性能問題。 SQL Server Profiler 揭示了正在運行的查詢比應有的多。 EF 似乎正在為相關模型的每個相關實體生成查詢。
現在這聽起來像是延遲加載。 問題是,在代碼中的任何地方都沒有引用導航屬性(至少沒有明確引用)。
當我為上下文關閉延遲加載時,它會修復它。 另外,如果我返回模型以外的東西(例如視圖模型),它會修復它。 這是一個舊的、實現不佳的 MVC 應用程序 - 無論如何它應該使用視圖模型,所以沒關系。 這些都是可以接受的修復,但我仍然想知道它為什么會發生。
我已經讀過,當對象被序列化時,導航屬性可能會被調用。 這就是這里發生的事情嗎? 如果是這樣,你能解釋為什么對象被序列化嗎? (注意我對序列化的理解是非常基礎的——基本上就是這里所說的。)
下面是一個例子:
控制器
[HttpGet]
public ViewResult StoreInfo(int id)
{
Store model = _posRepository.GetStore(id);
return View(model);
}
存儲庫
public Store GetStore(int storeID)
{
return _dbContext.Store.Single(x => x.StoreID == storeID);
}
模型
public partial class Store // highly simplified version
{
public int StoreID { get; set; }
public string StoreName { get; set; }
public Nullable<int> StateID { get; set; }
public virtual States State { get; set; } // lazy loaded
}
看法
// blank
無需任何第三方使用,您可以通過匿名對象實現這一點。
var dataList= _dbContext.Store.Single(x => x.StoreID == storeID); var jsonData= dataList.Select(c=> new {c.StoreID, c.StoreName, c.StateID, StateName=c.State?.Name, StateCode=c.State?.Code});
返回 Json(jsonData, JsonRequestBehavior.AllowGet);
希望現在一切都好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.