如何保留数据的先前值和新值?

3

我目前正在处理一个项目,需要归档和跟踪所有修改的数据。

当有修改时,我们必须保存以下信息:

  • 谁修改了数据?
  • 何时修改?
  • 还有……这就是我提出这个问题的原因:保留数据的先前和新值

我必须快速地跟踪每个数据的每次修改。

例如: 我有一个名字字段,其值为“Morgan”。

当我修改这个值时,我必须能够告诉用户,1月6日,由XXX修改,该值从“Morgan”更改为“Robert”……

我必须找到一种干净且通用的方法来做到这一点,因为大量数据都受此行为影响。

我的程序使用C#(.NET 4)编写,我们使用Sql Server 2008 R2和NHibernate进行对象映射。

您对如何处理这样的事情有什么想法、经验或解决方案吗?

3个回答

1

非常感谢。用户需要查看每个数据的所有先前更改。我尝试寻找不同的解决方案。触发器可能是最好的方法,但我想从其他开发人员那里获得反馈。 - Morgan

1
NHibernate Envers 是你想要的 :)
你必须使用 NHibernate 3.2+(3.2 是当前版本)。
它很容易就像
enversConf.Audit<Person>();

你可以在这里这里获取信息


谢谢您的回复。我会尽快尝试! - Morgan
嗯,我刚看了你给我的资源,听起来很有前途! - Morgan

0

我曾经也处于你的情况下,最终我是这样做的:

在数据库中保存一个ActivityEntry,其中包含一个标识列(如果您有多个更改的对象),一个操作指示器(可以是“用户更改了名字”,作为一个int值),日期字段、用户ID和最重要的参数字段。

将参数字段和操作指示器的值组合起来,我能够生成像“{0}从{2}变成{3},{1}更改了{0}的名字”这样的字符串,其中我的参数值可以是“John;Joe”。

我知道在数据库中保存这些完全松散类型的值可能感觉不太对,但我相信这是唯一的解决方法,而不必每个表都有一份副本。


感谢您的回复。每个新的ActivityEntry是由数据库触发还是您实现了另一种解决方案来创建数据库条目? - Morgan
在我的解决方案中(并不完美),我只是有一个方法(采用“params”字符串参数和行动指示器),每当用户做出某些操作时我就会调用它。如果你能够弄清楚用户所做的确切操作,我认为这是可以自动化的。 - jhovgaard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接