Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何保留数据的以前值和新值?_C#_.net_Sql Server 2008_Nhibernate_Trace - Fatal编程技术网

C# 如何保留数据的以前值和新值?

C# 如何保留数据的以前值和新值?,c#,.net,sql-server-2008,nhibernate,trace,C#,.net,Sql Server 2008,Nhibernate,Trace,我目前正在做一个项目,我们需要归档和跟踪所有修改过的数据 当修改放弃时,我们必须保留这些信息 谁修改了数据 什么时候 这就是为什么我要问这个问题:保持前一个 以及数据的新值 很快,我必须跟踪每个数据的每次修改 示例: 我有一个名称字段,为什么值为“Morgan” 当我修改此值时,我必须能够告诉用户,1月6日,到XXX,值从“Morgan”更改为“Robert”… 我必须找到一个干净、通用的方法来实现这一点,因为大量数据都与此行为有关 我的程序是用C#(.NET4)编写的,我们使用SQLSer

我目前正在做一个项目,我们需要归档和跟踪所有修改过的数据

当修改放弃时,我们必须保留这些信息

  • 谁修改了数据
  • 什么时候
  • 这就是为什么我要问这个问题:保持前一个 以及数据的新值
很快,我必须跟踪每个数据的每次修改

示例: 我有一个名称字段,为什么值为“Morgan”

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

我必须找到一个干净、通用的方法来实现这一点,因为大量数据都与此行为有关

我的程序是用C#(.NET4)编写的,我们使用SQLServer2008R2和NHibernate进行对象映射


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

我有点困惑,你想在什么时候获得新旧数据。但是,这可以在数据库触发器内完成,如以下问题所示:


我的处境和你一样。我最终是这样做的:

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

结合参数字段和操作指示符中的值,我能够生成类似“{0}将{1}的名字从{2}更改为{3}”的字符串,其中我的参数值可以是“John;Joe”


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

NHibernate Envers这就是你想要的:)

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

这很容易

enversConf.Audit<Person>();
enversConf.Audit();

您可以获取信息,非常感谢。用户需要查看每个数据上以前的所有更改。我试图找到不同的解决方案。触发器可能是最好的方法,但我想从其他DevThank获得反馈,以便您做出回应。每个新的ActivityEntry都是由数据库触发的,或者您实现了另一个解决方案来创建数据库条目?在我的解决方案(这并不完美)中,我只是有一个方法(使用
string
参数的
和操作指示器),每当用户做某事时,我都会调用该方法。我认为,如果您能够了解用户所做的确切操作,就有可能实现自动化。谢谢您的回复。我会尽快试一试的!嗯,我只是看看你给我的资源,听起来很有希望!