C# 在ASP.NET MVC3中审核/登录

C# 在ASP.NET MVC3中审核/登录,c#,asp.net-mvc-3,sql-server-ce,C#,Asp.net Mvc 3,Sql Server Ce,我们需要在MVC3项目中记录具体的操作。数据库表将存储类似以下内容的日志: ChildObject - ChildProperty: '6', was '7' List - [2, added]: 'c', was not present List - [removed]: No value present, was 'a' MultilineText: ----- 123 456 ----- was ----- abc def ghi ----- NotPreviouslyExisting

我们需要在MVC3项目中记录具体的操作。数据库表将存储类似以下内容的日志:

ChildObject - ChildProperty: '6', was '7'
List - [2, added]: 'c', was not present
List - [removed]: No value present, was 'a'
MultilineText: 
-----
123
456
-----
was 
-----
abc
def
ghi
-----
NotPreviouslyExisting: 'abc', was not present
“用户[SessionUserHere…]更改了[Name][Lastname][其他属性此处…]的[ChangedEmployeeHere…]值。”

我需要了解模型的哪些属性发生了更改,哪些属性保持了原始值。 有没有办法跟踪模型的哪些属性发生了更改

在数据库中,提出了触发器;但是我们在这个项目中使用SQLServerCompact


谢谢…

您看过INotifyPropertyChanged接口了吗


您可以在代码中而不是数据库中进行审核。在HttpPost处理程序中,获取原始值并使用审核函数比较对象。我有一个自制的实现,但它也做了类似的事情

这意味着您可以执行以下操作:

var original = GetDatabaseRecord(xx);
var newRec = GetFormSubmission();  // However you do this

var auditor = new CompareObjects();

if ( auditor.Compare(original, newRec) )
{
    foreach ( var diff in auditor.Differences )
    {
        // work through the deltas
    }
}
else
{
    // Nothing changed!
}
我自己的版本返回以下结构:

  • 名称(如“问题优先级”)
  • 更改(更改值、仅左侧、仅右侧)
  • 旧价值
  • 新价值

提供的链接可以满足您的需要,也可以作为起点。

我创建了一个库来实现这一点,并提供了一些额外的元数据。它依靠MVC
ModelMetadata
DataAnnotations
为非技术用户提供diff的“可读版本”

给定对象,如(显然没有元数据):

它将输出如下内容:

ChildObject - ChildProperty: '6', was '7'
List - [2, added]: 'c', was not present
List - [removed]: No value present, was 'a'
MultilineText: 
-----
123
456
-----
was 
-----
abc
def
ghi
-----
NotPreviouslyExisting: 'abc', was not present

这对翻译有任何支持吗?或者我必须分叉代码并修改它吗?