Аудит данных в NHibernate использование событий

Для комментариев разрешается с помощью:

SELECT * FROM
TABLE_shares
WHERE DATE_SHARE > DATE_SUB(NOW(), INTERVAL 7 DAY)

, которые могут использовать индекс DATE_SHARE

9
задан Iain Holder 30 July 2017 в 20:43
поделиться

3 ответа

Я не знал бы, как достигнуть того, что Вы хотите с ISaveOrUpdateListener интерфейс - Вы могли однако использовать в своих интересах факт это IPreUpdateEventListener и IPreInsertEventListener интерфейсы оба обеспечивают то, в чем Вы нуждаетесь..., например, делаете что-то вроде этого:

public bool OnPreUpdate(PreUpdateEvent evt)
{
    string[] names = evt.Persister.PropertyNames;
    for(int index = 0; index < names.Length; index++)
    {
        // compare evt.State[index] to evt.OldState[index] and get
        // the name of the changed property from 'names'
        // (...)
    }
}

и сделайте то же самое для пред вставка.

6
ответ дан 4 December 2019 в 12:21
поделиться

Вы могли реализовать Шаблон "memento" для сериализации состояния от начальной Загрузки через ILoadEventListener. Очевидно, Вы не хотите хранить наборы / отношения, или Вы копировали бы целый граф объектов. Можно затем вытащить это и выдержать сравнение в ISaveOrUpdateEventListener.

0
ответ дан 4 December 2019 в 12:21
поделиться

Вы также можете использовать метод FindDirty на Persister, чтобы позволить NHibernate делать сравнения за вас:

var dirtyFieldIndexes = @event.Persister.FindDirty(@event.State, @event.OldState, @event.Entity, @event.Session);

foreach (var dirtyFieldIndex in dirtyFieldIndexes)
{
    var oldValue = @event.OldState[dirtyFieldIndex];
    var newValue = @event.State[dirtyFieldIndex];

    // Log values to new "AuditLog" object and save appropriately.
}
11
ответ дан 4 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: