2011-09-01 69 views
0

我需要這個簡單的語句添加到每個SQL查詢,每個表:實體框架,已刪除= 0

WHERE刪除= 0

有沒有這樣做的任何簡單的方法?我的意思是我需要過濾所有記錄,最好是在edmx文件中。

+0

@Darin我有一個而不是dlete觸發器,將刪除設置爲1.所以現在我只需要篩選記錄不包括刪除記錄。 – user194076

+0

你有沒有考慮過僅僅使用這個視圖? – Gabe

回答

5

聽起來像你想用默認到WHERE添加到您的對象集。我不知道默認情況下是否可以這樣做,但我可以想到的一些方法可以實現這一點:

1)使用視圖爲您提供WHERE子句並從視圖中構建實體。我從來沒有真正做到這一點,所以我不知道視圖與EF有多好 - 如果你需要寫回數據庫,這可能不會很好。

2)在局部類的EDMX的創建新特性,如:

partial class MyEntities 
{ 
    public IQueryable<Foo> ActiveFoos 
    { 
     return Foos.Where(f => f.Deleted == 0); 
    } 
} 
... 
using (var context = new MyEntities()) 
{ 
    var foo = context.ActiveFoos.Where(f => f.Id == 1).SingleOrDefault(); 
} 

3)創建一個子上下文類和new出來的性能 - 那種醜陋,但這將是相當透明的開發者一旦建立起來。

public class CustomEntities : MyEntities 
{ 
    public new IQueryable<Foo> Foos 
    { 
     get { return base.Foos.Where(f => f.Deleted == 0); } 
    } 
} 
... 
using (var context = new CustomEntities()) 
{ 
    var foo = context.Foos.Where(f => f.Id == 1).SingleOrDefault(); 
} 
+0

+1非常有用的想法。 –

+0

@Joe伊諾斯 - 可以只是做 context.Foos.SingleOrDefault(F => f.Id == 1); 而不是 context.Foos.Where(f => f.Id == 1).SingleOrDefault(); –

+0

@ Cubicle.Jockey好的呼叫。我通常使用'.Where'方法,即使它不是必需的,因爲它更容易修改(添加更多的Where,OrderBy等等),但這是一種非常常見的情況,會更乾淨。 –

0

您必須在您從EntityFramework獲得結果時執行此操作。

例子:

IEnumerable<TableEntity> filteredResults = TableEntityName.Where(t => t.Delete = 0); 
+0

-1絕對有選擇保持這種乾爽。 –

2

的唯一可靠方法,以確保Deleted = 0用於總是(包括延遲加載,顯式加載和渴望加載)使用Conditional mapping。條件映射的缺點是Deleted列在entity = Delete操作中不可用,該操作將設置此列的列必須映射到存儲過程。