Я вновь и вновь внедряю код, который заставил меня задать этот вопрос об аудите данных в NHibernate. Однако на этот раз я хочу пойти с Шоном Карпентером предложением и реализовать ISaveOrUpdateEventListener (новый в NHibernate 2.x)
Я хочу добавить строку в базе данных для каждого изменения каждого свойства со старым значением и новым, поэтому позже в пользовательском интерфейсе я могу сказать что-то вроде "Пользователь Боб изменил Свойство Wibble с A на B на 9 марта 2009 в 21:04 "
Какой лучший способ сравнить состояние объекта, чтобы выяснить, какие свойства объекта изменились?
Вы можете получить загруженное состояние объекта следующим образом:
public void OnSaveOrUpdate(SaveOrUpdateEvent saveOrUpdateEvent)
{
object[] foo = saveOrUpdateEvent.Entry.LoadedState;
}
И я полагаю, что мог бы использовать отражение, чтобы выяснить, какие свойства изменились, но я копался в поисках, и, похоже, нет подходящего набора свойств для сравнения. Я бы подумал, что будет метод GetChangedProperties () или что-то в этом роде.
Я всегда мог получить старый объект из базы данных как есть и сравнить его, но это еще один удар по базе данных, и в этом сценарии он показался бы неуклюжим.
Какое лучшее направление для этого?
P.S. В случае, если это что-то меняет, это проект архитектуры ASP.NET-MVC / S # arp.