私は Entity Framework を使用してドメイン モデルにアクセスしています。これらはすべて、アイテムが公開されているかどうかを示すプロパティを指定するインターフェイス (IPublishable) を実装しています。
フロントエンドからアイテムにアクセスするとき、私は常に未公開のアイテムを除外したいと考えています。したがって、クエリを作成するたびに、これと同様のことを行っています (次の DbSets Objects1 と Objects2 の両方が実装されています)。IPublishable
context.Objects1.Where( x => x.IsPublished ...).OrderBy( x => x.Id).ToList()
context.Objects2.Where( x => x.IsPublished ...).First()
理想的なのは、Web アプリ内のすべてのクエリに共通Where()
句を挿入できる場合、または各クエリに含めることができる拡張メソッドを作成する方法がある場合です。
すべてのlinqクエリの拡張メソッドを作成しようとしました
public static IEnumerable<T> FrontEnd<T>(this DbSet<T> dbSet) where T : class {
return dbSet.Cast<IPublishable>().Where( x => x.IsPublished ...).Cast<T>();
}
そして、このように使用します...
context.Objects1.FrontEnd().Where( x => ...).OrderBy(...
ただし、「LINQ to Entities は EDM プリミティブまたは列挙型のキャストのみをサポートしています」というエラーが表示されます
私はEFを初めて使用するので、どんな情報でも大いに役立ちます。ありがとう