实体框架 - 获取外键关系的计数

时间:2012-07-25 00:48:54

标签: asp.net-mvc dry

我有一个简单的类别管理系统。

在我自动生成的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来实现此目的?

1 个答案:

答案 0 :(得分:1)

尝试

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