Audit.Net Entity Framework Provider: сохраните работу БД перед журналом аудита - PullRequest
0 голосов
/ 23 января 2019

Я пробовал поставщика Audit.NET Entity Framework без использования наследования, описанного в https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.EntityFramework#without-inheritance

Есть ли способ сначала сохранить операции с БД, а затем создать AuditEvent? Я заметил, что если у вас настроены ограничения БД, событие Audit по-прежнему срабатывает, в то время как DbContext.SaveChangesAsync создает исключение в основном потоке.

Этот фрагмент выполняет операцию с БД, но не запускает событие Audit:

public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
    {
        try
        {   
            int saveResult = await base.SaveChangesAsync(cancellationToken);
            return await _helper.SaveChangesAsync(_auditContext, () => Task.FromResult(saveResult));
        }
        catch (Exception)
        {
            throw;
        }
    }

Но если я заменю две строки на

return await _helper.SaveChangesAsync(_auditContext, () => base.SaveChangesAsync(cancellationToken));

работает нормально, но Аудит происходит перед операцией БД. Что мне здесь не хватает?

1 Ответ

0 голосов
/ 23 января 2019

В нормальных условиях и по умолчанию сохранение аудита происходит после возврата DbContext.SaveChanges.Вы можете проверить код здесь .

Создание области действия выполняется перед операцией БД, но сохранение аудита не запускается до тех пор, пока контекст не завершит операцию.

Не следует использовать первый подход, следует только вызвать_helper.SaveChanges на вашем переопределении.

...