2012-03-20 53 views
1

我對同一個數據庫表有兩個不同的視圖,我想對兩個視圖使用相同的查詢。在實體框架中對不同的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) 
} 

我想要的是更優雅的解決方案。基本上我想有兩個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 2012-03-20 09:04:45

+0

現在工作順利。我只需要改變方法簽名:「public static IQueryable YourHugeQueryMethod (DbContext context,...)其中T:class,IView,new()」。在課程限制之前出現界面錯誤。謝謝! – Tx3 2012-03-20 12:41:31

+0

謝謝,我會更新樣本。 – 2012-03-20 13:09:42