2012-01-06 9 views
3

我目前正在研究一個需要存檔和追蹤所有修改數據的項目。如何保持以前和新的數據價值?

在修改投降,我們要誰修改的數據保存論文信息

  • 什麼時候?
  • 而...這就是爲什麼我問這個問題:保留以前的 和數據的新值

很快,我必須跟蹤每個數據的每個修改。

示例: 我有一個名稱字段爲什麼值「摩根」。

當我修改這個值,我必須要能說,今年1 6日,由XXX,值從「摩根」到「羅伯特」改變了用戶...

我要找到一個乾淨而通用的方法來做到這一點,因爲這種行爲涉及大量的數據。

我的程序使用C#(.NET 4),我們使用Sql Server 2008 R2和NHibernate進行對象映射。

你有任何想法,經驗或解決方案,如何做這樣的事情?

回答

1

我有點困惑,在什麼時候你想擁有舊的vs新的數據。但是,這可以將數據庫觸發器內完成,如以下問題:

trigger-insert-old-values-values-that-was-updated

+0

非常感謝。用戶需要查看每個數據的所有以前的更改。我試圖找到不同的解決方案。觸發器可能是最好的方式,但我想從其他Dev獲得反饋。 – Morgan 2012-01-06 22:22:05

0

我一直在同樣的情況你。我最終這樣做:

在包含標識列的數據庫中保存ActivityEntry(如果您有多個更改的對象),操作指示器(可以是「用戶更改的名字」,作爲int),日期字段,userId和最重要的參數字段。

結合參數字段和動作指示符的值,我可以使字符串變成「{0}」{1}的名字從{2}改爲{3}「,其中我的參數值可能是「約翰,喬」。

我知道在數據庫中保存這些完全鬆散類型的值感覺有點不對,但我相信這是唯一的方法,而不需要每個表的副本。

+0

感謝您的迴應。並且每個新的ActivityEntry都由數據庫觸發,或者您實現了另一個創建數據庫條目的解決方案? – Morgan 2012-01-06 22:33:46

+0

在我的解決方案中(這並不完美),我只是有一個方法(採用參數''params''和行爲指示器),我每次用戶做了一些事情都會調用它。如果您能夠弄清楚用戶所做的確切操作,我認爲可以將其自動化。 – jhovgaard 2012-01-06 23:09:23

1

NHibernate的Envers它你想要什麼:)

您必須使用NHibernate的3.2+(3.2是當前版本)。

它很容易像

enversConf.Audit<Person>(); 

你可以得到的信息herehere

+0

感謝您的回覆。我會盡快嘗試! – Morgan 2012-01-08 20:04:04

+0

哼,我只是看看你給我的資源,聽起來很有希望! – Morgan 2012-01-08 20:08:52

相關問題