Аудит / Вход в ASP.NET MVC3 - PullRequest
2 голосов
/ 06 марта 2012

Нам нужно зарегистрировать конкретное действие в проекте MVC 3. Таблица базы данных будет хранить журналы что-то вроде:

"Пользователь [ SessionUserHere ... ] изменен [ Имя ] [ Фамилия ] [ OtherAttributesHere ... ] значения [ ChangedEmployeeHere ... ] "

Мне нужно узнать, какие атрибуты модели изменились, а какие сохранили свои первоначальные значения. Есть ли способ отследить, какие атрибуты модели изменились?

В MVC3 при выполнении аудита предлагается триггер базы данных; но мы используем Sql Server Compact для этого проекта.

Спасибо ...

Ответы [ 3 ]

1 голос
/ 21 мая 2012

Вы можете проводить аудит в коде, а не в базе данных.В обработчике HttpPost получите исходное значение и сравните объекты с помощью функции аудита.У меня есть реализация Home Brew, но она делает аналогичные вещи Сравнить .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 голос
/ 04 декабря 2012

Я создал библиотеку, чтобы сделать это и предоставить некоторые дополнительные метаданные.Он полагается на MVC ModelMetadata и DataAnnotations, чтобы обеспечить «читаемую версию» diff для нетехнических пользователей.

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
1 голос
/ 06 марта 2012

Вы смотрели на интерфейс INotifyPropertyChanged?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...