2012-03-06 25 views
2

MVC 3プロジェクトで特定のアクションを記録する必要があります。データベーステーブルには、ログに何か保存します:ASP.NET MVC3の監査/ログイン

「ユーザー[ChangedEmployeeHereの[SessionUserHere ...]に変更[] [] [OtherAttributesHere ...]の値を...] "

モデルのどの属性が変更され、どの属性が元の値を保持するかを知る必要があります。 モデルの属性を変更する方法はありますか?

MVC3 doing Audit trailには、データベーストリガが提案されています。このプロジェクトにはSql Server Compactを使用します。

おかげで...

答えて

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)
  • 旧値
  • 新しい値

提供されているリンクで十分かもしれません。

1

私はこれを行うと、いくつかの追加のメタデータを提供するライブラリを作成しました。 MVC ModelMetadataDataAnnotationsを利用して、技術的ではないユーザーのためのdiffの「読み取り可能なバージョン」を提供しています。これは、出力何かたい

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 
+0

これは翻訳のためのサポートのいずれかの種類を持っていないか、または私が持っていない(当然なしメタデータ)のような物体を考えると

https://github.com/paultyng/ObjectDiff

コードをフォークして変更するには? –