2012-03-20 16 views
1

同じデータベーステーブルに対して2つの異なるビューがあり、両方のビューに対して同じクエリを使用したいと思います。Entity Frameworkの異なるDbSetsに対して同じクエリを使用する

私は今、基本的にクエリのコピーを持っている醜い解決策に従っています。

DbSet<uvw_MyView1> view1 = entities.uvw_MyView1; 
DbSet<uvw_MyView2> view2 = entities.uvw_MyView2; 

if(doQueryOnView1) 
{ 
    // huge query 
    view1.Where(jada jada) 
} 
else 
{ 
    // huge query copied here with exception of different DbSet 
    view2.Where(jada jada) 
} 

より洗練されたソリューションです。基本的には、2つのDbSetに同じクエリ部分を持たせたいのですが、それは全く同じですが、異なる行を返します。何か案は?

答えて

1

ビューのすべてのプロパティを含むインターフェイスを追加し、両方のビューエンティティでこのインターフェイスを実装します。その後、クエリ全体を含むメソッドを作成する:

public static IQueryable<T> YourHugeQueryMethod<T>(DbContext context, ...) 
    where T : class, IView, new() 
{ 
    DbSet<T> set = context.Set<T>(); 
    return set.Where(...); 
} 
+0

素晴らしい!これらのインターフェイス定義を追加する最も簡単な方法は、これらのビュー(DbSet)の部分クラスを作成することです。これを直ちに試してみます。 – Tx3

+0

スムーズに動作します。私がしなければならなかったのは、メソッドシグネチャを変更することだけでした。 "public static IQueryable YourHugeQueryMethod (DbContext context、...)ここでT:class、IView、new()"クラス制限の前にインタフェースを持つことによってエラーが発生しました。ありがとう! – Tx3

+0

ありがとうございます、サンプルを更新します。 –