我有一个简单的类别管理系统。
在我自动生成的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来实现此目的?
答案 0 :(得分:1)
尝试
if ( category.Members.CreateSourceQuery().Count() > 0 )