2012-01-06 57 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

相关问题