【发布时间】:2012-07-25 00:48:53
【问题描述】:
我有一个简单的类别管理系统。
在我自动生成的 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,而不是实际加载 Members 实体并在内存中遍历它们。
有没有办法在 EF 中做到这一点,还是我需要定义一个存储过程或自定义 SQL 来实现这一点?
【问题讨论】:
标签: asp.net-mvc dry