0

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

在我自动生成的 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 来实现这一点?

4

1 回答 1

1

尝试

if ( category.Members.CreateSourceQuery().Count() > 0 )
于 2012-07-25T01:05:02.963 回答