我有一个简单的类别管理系统。
在我自动生成的 EF 实体中,我有两类相关性:
class Category {
public EntityCollection<Member> Members { get; }
}
class Member {
public Category ParentCategory { get; }
}
我有一个业务规则,如果它有任何成员,它会阻止删除一个类别。我希望通过这样做来实现这一点:
if( category.Members.Count() > 0 ) // then disallow deletion
但是,此调用始终返回零。
看来我需要先实际加载集合,这会导致数据库命中:
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 中做到这一点,还是我需要定义一个 sproc 或自定义 SQL 来实现这一点?