私はシンプルなカテゴリー管理システムを持っています。
自動生成されたEFエンティティには、2つの関連性のクラスがあります。
class Category {
public EntityCollection<Member> Members { get; }
}
class Member {
public Category ParentCategory { get; }
}
カテゴリにメンバーがいる場合、そのカテゴリの削除を防ぐビジネスルールがあります。私はこれを行うことによってそれを達成することを望んでいました:
if( category.Members.Count() > 0 ) // then disallow deletion
ただし、この呼び出しは常にゼロを返します。
最初にコレクションを実際にロードする必要があるようです。これにより、DBヒットが発生します。
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を定義する必要がありますか?