3

この投稿http://jmdority.wordpress.com/2011/07/20/using-entity-framework-4-1-dbcontext-change-tracking-forに従って、EFアプリケーションを使用してMVC 4に監査を実装しようとしています-監査ロギング/ .

エンティティが変更されたときに、変更されたプロパティを見つけることができません。DbContext から継承し、SaveChanges メソッドをオーバーライドするクラスがあります。この新しい SaveChanges メソッドには、エンティティが ChangeTracker.Entities() からの変更されたプロパティを探す次のコードがあります。

foreach (var propertyName in entity.OriginalValues.PropertyNames)
{
    var originalValue = entity.OriginalValues.GetValue<object>(propertyName);
    var newValue = entity.CurrentValues.GetValue<object>(propertyName);

    if (!object.Equals(originalValue, newValue))
    {
        // Insert an auditing record.
    }
}

この問題は、データベースにまだ何も保存されていない場合でも、originalValue が常に newValue と等しいことです。プロパティが変更されたかどうかを確認できるように、元の値を取得するにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

6

次のように実行できます。

foreach (var propertyName in entity.OriginalValues.PropertyNames)
            {
                String originalValue = "";
                String newValue = "";

                originalValue = entity.GetDatabaseValues().GetValue<object>(propertyName).ToString();

                newValue = entity.CurrentValues.GetValue<object>(propertyName).ToString();

                changes += propertyName.ToString() + " : " + originalValue + " --> " + newValue + "\n";
            } 
于 2014-05-20T07:44:39.100 に答える