[英]Adding a default where clause to a linq-to-sql table
是否可以向Linq-to-SQL類生成的每個SQL語句添加默認的where子句?
我有一個帶有Customer類的自定義DataContext。 Customer類具有Deleted屬性,這是我希望在查詢表時始終為NULL
屬性。
因此,例如,我可以寫:
List<Customer> customers = db.Customers.ToList<Customer>();
但真正得到:
List<Customer> customers = db.Customers.Where(o => o.Deleted == null).ToList<Customer>();
我想在數據庫中維護“已刪除”數據,但是永遠不需要在.NET代碼中看到它們。 這種默認設置很方便,因此我不必記住將過濾器添加到每個查詢中。
您可以添加一個名為ActiveCustomers
的新屬性,該屬性返回以下內容:
public IQueryable<Customer> ActiveCustomers {
get { return db.Customers.Where(e => e.Deleted == null); }
}
針對該屬性的任何查詢都可以指定其他Where
條件並以其他方式修改結果,但是它們始終以尚未刪除的客戶開始 。 而且由於LINQ的執行延遲,因此該語句不會導致執行任何其他查詢。
如果您需要確保沒有人可以訪問db.Customers
,則可以嘗試通過以下操作將其隱藏(可能無法正常工作,我需要查看您的實現):
public new IQueryable<Customer> Customers {
get {
throw new InvalidOperationException("Use property ActiveCustomers instead.");
}
}
無需將表添加到dbml設計器中,而是添加一個包含默認where子句的視圖,並僅在dbml中將視圖命名為Customer。
要允許更新,插入和刪除,請確保選擇DBML設計器中的主鍵列,並將其Primary Key
屬性標記為true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.