2013-09-25 59 views
0

我有一個數據庫第一個實體框架項目。對於我添加的每個實體,都將一個集合添加到實體的DbContext中。我在DbContext構造函數中設置了LazyLoadingEnabled = false。如果我闖入下面的代碼並檢查CustomerDepartments的數量,我會得到表格的總數。如果我只是添加一條新記錄,我預計在添加之前計數爲0,之後爲1。我在無狀態環境中使用它,所以加載整個表來添加記錄似乎是荒謬的。我究竟做錯了什麼?實體框架是否會自動加載我的所有數據(不是引用和惰性加載關閉)?

using (Model.SupportEntities support = new Model.SupportEntities(_state.Credentials, _handler.ReadWriteConnectionString)) 
{ 
    Model.CustomerDepartment department = Json.JsonConvert.DeserializeObject<Model.CustomerDepartment>(_insertObject); 
    support.CustomerDepartments.Add(department); 
    support.SaveChanges(); 
    _state.ReturnNewIdAsJson(department.CustomerDepartmentID); 
} 
+0

也許我錯誤地解釋了你的問題,但是不應該將LazyLoadingEnabled設置爲true嗎? – Erwin

回答

1

看來你誤解了如何DbContextDbSet作品。

這可能是最好的,如果你得到一個記錄EntityFramework SQL調用的工具嘗試Clutch.Diagnostics.EntityFramework

當你調用DbSet<T>IEnumerable<T>.Count(),實體框架運行下面的查詢

SELECT COUNT(*) FROM TableName; 

但它不會加載整個表。

你想爲你想要的行爲的實際調用要麼

support.CustomerDepartments.Local.Count; 

OR

support.ChangeTracker.Entries<T>().Count() 

這些不會碰到數據庫。

您必須記住DbSet是Database表的抽象,因此調用它的Count()會告訴您表中有多少行。

順便說一句。僅供參考。該公約是呼叫您的名字DbContextSupportContextModel命名類或名稱空間表明他們是您的POCO。

相關問題