2012-07-25 87 views
0

我有一個簡單的分類管理系統。實體框架 - 獲取外鍵關係的計數

在我的自動生成的EF實體我有兩個重要性等級:

class Category { 
    public EntityCollection<Member> Members { get; } 
} 
class Member { 
    public Category ParentCategory { get; } 
} 

我有阻止類別中刪除,如果有任何一個成員的業務規則。我希望這樣做:

if(category.Members.Count() > 0) // then disallow deletion 

但是,這個調用總是返回零。

看來,我需要真正的第一次加載集合,incurrs一個DB命中:

if(!category.Members.IsLoaded) category.Members.Load(); 
if(category.Members.Count() > 0) // then disallow deletion. This works. 

我希望的是,EF將足夠聰明到初始.Count()調用轉換成SQL SELECT COUNT(*) FROM Members WHERE Members.CategoryId = @parentCategoryId代替實際加載成員實體並在內存中遍歷它們。

有沒有辦法在EF中做到這一點,還是我需要定義一個存儲過程或自定義SQL來實現這一點?

回答

1

嘗試

if (category.Members.CreateSourceQuery().Count() > 0)