2011-06-04 69 views
0

我想知道如果使用EF,跟蹤和/或持久性更改的最佳做法是什麼。我想開始使用EF來創建一個新項目。我需要的是一種改變歷史。隨着時間的推移,用EF更改跟蹤?

這就是我之前做過的:如果創建了一條記錄,它會保存一個ID並且ID與InvariantID相同。如果記錄已更新,我將其標記爲已刪除,並使用新值和新ID創建一個新記錄,但使用相同的InvariantID。就像這樣,我總是有我目前的記錄,但也有變化的歷史。

這對我的情況非常合適。歷史記錄的數量不是問題,因爲我通常只用於不經常更改的數據。

這是建立在英孚以某種方式或什麼是獲得這種行爲的最佳方式是EF?

回答

1

不,它不是建立在EF中,它不會以這種方式工作。我甚至認爲它不是數據庫級別的好方法,因爲它使參照完整性非常複雜。

隨着EF這隻會工作,如果你使用以下方法:

  • 您將使用條件映射爲你的實體 - 條件將IsDeleted = 0。它將確保只有未刪除的實體將用於查詢。
  • ,你將有映射存儲過程進行刪除操作正確設置IsDeleted = 1,而不是真正地刪除記錄
  • 您必須手動調用DeleteObject刪除您的記錄之後,你將插入新記錄 - 原因是EF無法處理實體在更新期間更改其PK值的場景。
  • 您的實體將不能參與的關係,除非你手動重建參照完整性與其他一些存儲過程
  • 您將需要存儲過程來查詢歷史(刪除)記錄
+0

哦,親愛的。這聽起來有點複雜。但我可以看到你的觀點。如果我需要一種快照,什麼會是更好的方法?假設我將擁有與預訂相關的車輛。現在,即使車輛在數據庫中更新,我也一直需要保存預訂時的車輛狀態。我的第一個想法可能是將相關信息與預訂一起存儲。但不知道這是否是要走的路。但採用這種方法,我應該可以使用EF。沒有你表現出的痛點。 – pantarhei 2011-06-04 18:53:37

+0

我總是使用單獨的表格作爲歷史數據。對於每個表或者對於所有表都需要一個數據序列化。對這些表格的插入要麼直接從應用程序中完成,要麼從觸發器完成。 SQL Server 2008也有其自己的內置更改跟蹤機制,但我從來沒有使用它。 – 2011-06-04 19:08:00

相關問題