IPreUpdateEventListener делает объект грязным - PullRequest
0 голосов
/ 20 февраля 2011

Я использую IPreUpdateEventListener для целей аудита.Мое решение точно такое, как Айенде Рахиен говорит здесь .Примерно так:

public bool OnPreUpdate(PreUpdateEvent @event)
{
    var audit = @event.Entity as IHaveAuditInformation;
    if (audit == null)
        return false;

    var time = DateTime.Now;
    var name = WindowsIdentity.GetCurrent().Name;

    Set(@event.Persister, @event.State, "UpdatedAt", time);
    Set(@event.Persister, @event.State, "UpdatedBy", name);

    audit.UpdatedAt = time;
    audit.UpdatedBy = name;

    return false;
}

Мои проблемы в том, что я должен установить audit.UpdatedAt = time;, чтобы иметь значение в моей сущности, но это загрязняет объект и вызывает еще одно обновление базы данных.Мне нужно новое значение в моем объекте, но я не хочу повторного обновления.Есть ли способ?

1 Ответ

1 голос
/ 20 февраля 2011

Это не должно вызывать два обновления;что-то еще происходит.Проблема может заключаться в том, что разрешение поля UpdateAt базы данных отличается от разрешения .NET DateTime.Now.Мой код почти идентичен вашему, но я использую этот метод для создания метки времени:

    /// <summary>
    /// Return a DateTime with millisecond resolution to be used as the timestamp. This is needed so that DateTime of an existing instance
    /// will equal one that has been persisted and returned from the database. Without this, the times differ due to different resolutions.
    /// </summary>
    /// <returns></returns>
    private static DateTime GetTime()
    {
        var now = DateTime.Now;
        var ts = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond, DateTimeKind.Local);
        return ts;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...