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

时间:2012-01-06 22:08:45

标签: c# .net sql-server-2008 nhibernate trace

我目前正在开展一个项目,我们需要存档和跟踪所有已修改的数据。

当修改投降时,我们必须保留这些信息

  • 谁修改了数据?
  • 当?
  • 而且......这就是我问这个问题的原因:保留以前的问题 以及数据的新值

很快,我必须跟踪每个数据的每个修改。

示例: 我有一个名字字段为什么价值“摩根”。

当我修改此值时,我必须能够向用户说明1月6日,XXX,值从“Morgan”更改为“Robert”......

我必须找到一个干净且通用的方法来执行此操作,因为此行为会涉及大量数据。

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

关于如何做这样的事情,你有任何想法,经验或解决方案吗?

3 个答案:

答案 0 :(得分:1)

我对您希望获得旧数据和新数据的时间点感到困惑。但是,这可以在数据库触发器中完成,如下面的问题所示:

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

答案 1 :(得分:1)

NHibernate让你想要的东西:)

您必须使用NHibernate 3.2+(3.2是当前版本)。

很容易就像

enversConf.Audit<Person>();

您可以获取信息herehere

答案 2 :(得分:0)

我和你一样处于同样的境地。我最终以这种方式做了:

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

组合参数字段和动作指示器中的值我能够使“{0}将{1}的名字从{2}更改为{3}”这样的字符串,其中我的参数值可以是“约翰;乔”

我知道在数据库中保存这些完全松散类型的值感觉有点不对,但我相信这是唯一的方法,没有每个表的副本。