审核/登录ASP.NET MVC3

时间:2012-03-06 09:41:32

标签: c# asp.net-mvc-3 sql-server-ce

我们需要记录MVC 3项目中的特定操作。数据库表将存储类似以下内容的日志:

“用户[ SessionUserHere ... ]已更改[名称] [姓氏] [其他属性... ] [ ChangedEmployeeHere ... ]“

的值

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

MVC3 doing Audit trail中提出了数据库触发器;但我们在这个项目中使用Sql Server Compact。

...谢谢

3 个答案:

答案 0 :(得分:1)

您是否查看了INotifyPropertyChanged界面?

http://msdn.microsoft.com/en-us/library/ms743695.aspx

答案 1 :(得分:1)

您可以在代码而不是数据库中进行审核。在HttpPost处理程序中,获取原始值并使用审计功能比较对象。我有一个家庭酿造实施,但这做了类似的事情Compare .NET Objects

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

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!
}

我自己的版本返回以下结构:

  • 名称(例如“Issue.Priority”)
  • 更改(ChangedValue,OnlyLeft,OnlyRight)
  • 旧价值
  • 新价值

提供的链接可能就足够您或作为起点。

答案 2 :(得分:1)

我创建了一个库来做这件事并提供一些额外的元数据。它依赖于MVC ModelMetadataDataAnnotations来为非技术用户提供差异的“可读版本”。

https://github.com/paultyng/ObjectDiff

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

var before = new 
{ 
    Property1 = "", 
    MultilineText = "abc\ndef\nghi", 
    ChildObject = new { ChildProperty = 7 }, 
    List = new string[] { "a", "b" } 
};

var after = new 
{ 
    Property1 = (string)null, 
    MultilineText = "123\n456", 
    NotPreviouslyExisting = "abc", 
    ChildObject = new { ChildProperty = 6 }, 
    List = new string[] { "b", "c" } 
};

它会输出如下内容:

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