0

我有幾個實體包含EffectiveAsOf和ExpiredAsOf的日期時間字段。當一個實體被修改時,我想重寫SaveChanges方法,而不是隻更新現有的實體,讓代碼將原始記錄保存到數據庫,並將ExpiredAsOf datetime設置爲當前時間,並用新數據插入一條新記錄並且將EffectiveAsOf設置爲ExpiredAsOf設置爲null的當前時間。如何向SaveChanges中的objectStateEntryList中添加新記錄覆蓋

我知道,在objectStateEntryList的ObjectStateEntry項目包含CurrentValues和原始值對象,以及作爲一個實體對象。 EF使用什麼將數據寫入數據庫CurrentValues數據或實體?我如何着手創建一個新的條目?或者,我是否完全用錯誤的方式去做這件事?

我知道我可以在EF以外的實體中處理這個問題,但寧可讓EF自動檢測並處理這些實體。

預先感謝您的幫助和洞察力, 吉姆

回答

0

EF默認情況下,將同時使用 - 它使用原始值來檢查併發問題(例如,如果因爲您加載從數據記錄已經改變DB)然後使用實體的當前/修改值更新數據庫記錄。

EF不可能「自動檢測並處理這些實體」。您將需要創建實體對象的新實例,複製現有實體對象中的值,在兩個對象上設置適當的有效日期和過期日期,將新實體對象添加到DbContext,然後保存更改。執行此操作的最佳位置是覆蓋DbContext的SaveChanges()方法。爲了儘可能保持乾淨和易於管理,我建議使用存儲庫模式。