因此,這裏是我的情況:實體框架,軟刪除和查詢
我軟刪除一些表中的行,使用IsDeleted
標誌,這樣一個可以讓我的歸檔數據的痕跡。我通過覆蓋我的ObjectContext
中的SaveChanges
聲明來做到這一點。
現在的問題是:我怎樣才能選擇只有IsDeleted == false
的行,而不必在每個查詢中指定&& !IsDeleted
?
有沒有一種方法可以直接在我的上下文中指定它?
tkx!
因此,這裏是我的情況:實體框架,軟刪除和查詢
我軟刪除一些表中的行,使用IsDeleted
標誌,這樣一個可以讓我的歸檔數據的痕跡。我通過覆蓋我的ObjectContext
中的SaveChanges
聲明來做到這一點。
現在的問題是:我怎樣才能選擇只有IsDeleted == false
的行,而不必在每個查詢中指定&& !IsDeleted
?
有沒有一種方法可以直接在我的上下文中指定它?
tkx!
你可以定義在你的表視圖,查詢該視圖,而不是:
CREATE VIEW dbo.ActiveData
AS
SELECT (list of columns)
FROM dbo.YourTable
WHERE IsDeleted = 0
然後在您的EDMX模型,從ActiveData
視圖,而不是基礎表中讀取數據。
如果右鍵單擊模型查看器中的EntitySet,然後單擊「表格映射」,則會出現一個您可以「添加條件」的區域。這應該做你所問的,儘管按照marc_s的建議你可能會更好地使用View來代替。
條件映射是EF中的正確途徑。使用視圖作爲@marc建議的作品,但它將需要額外的更改。 – 2012-01-13 08:26:21
如何在沒有物理edmx的情況下使用代碼優先進行條件映射? – danludwig 2012-01-13 18:48:38
@olivehour:http://stackoverflow.com/questions/8161689/entity-framework-conditional-mapping-with-code-first – StriplingWarrior 2012-01-13 19:39:11
這是一個古老的問題,但對於任何新來的人來說。從EF 6起,你應該使用攔截器來進行這種查詢。它在運行時在SQL查詢中放置查詢,並根據標誌過濾記錄。
請參閱下面的更多信息:
EF代碼優先或模型的第一? – StriplingWarrior 2012-01-12 19:43:09
而不是標誌,使用表。對於已刪除的表,PK可以與主表相同,PK將刪除的表的PK作爲FK分配給主表。如果您在刪除記錄中找到記錄,那麼將其刪除,如果沒有激活。然後它只是一個簡單的加入。查詢性能會比使用位標誌更好。 – 2012-01-12 20:28:54
@JonRaynor:數據庫並不是我的專長,但在我看來,檢查一下位標誌比做一個連接要便宜很多,特別是因爲你通常會對知道哪些項目更感興趣。不被*刪除(因此不存在於已刪除的表格中)。如果位標誌損害了查詢性能,我寧願使用索引來創建一個完全獨立的表。 – StriplingWarrior 2012-01-13 16:08:52