2012-10-18 48 views
0

我有兩個表:業主和客戶,其中有1到多個關聯。試圖微調我的實體學習,我碰到了一個障礙。整整一天,沒有任何的運氣,我已經試過推理低谷代碼這兩個類似的路線返回不同的值:只有收到不正確的實體結果

測試的目的,我想每個業主共有的客戶。所有者實體具有返回一組客戶端對象的客戶端導航。我希望結果包括業主實體,其中包括客戶實體。

我想知道爲什麼這三種方式返回客戶端的總數量是不同的。第一個和第二個返回零客戶端,第三個返回正確的客戶端總數。

返回零客戶端:

Owner owner = context.Owners.First(o => o.ownerID == 5); 
var clients = owner.Clients.Count(); 

-

Owner owner = context.Owners.Where(o => o.ownerID == 5).FirstOrDefault(); 
var clients = owner.Clients.Count(); 

返回正確的計數

var clients = context.Owners.Where(o => o.ownerID == 5).Select(o => o.Clients.Count()).FirstOrDefault(); 

我希望找到一種解釋爲什麼事情是如此的不同。

謝謝

+1

是否啓用延遲加載?看來它可能不是。在這種情況下,你會想使用.Include來加載實體。 – Pawel

回答

0

正如Pawel所說,這必須與延遲加載有關。沒有,就是這樣。我假設你的Owner類創建了它自己的Clients集合(在它的構造函數中,我認爲),否則它將爲空。

現在,如果您將Clients集合定義爲虛擬(假設您的代碼優先),那麼當您尋址owner.Clients.Count()時,EF將可以延遲加載它。