Audit.Net Entity Framework Provider: 保存审计日志前的DB操作
Audit.Net Entity Framework Provider: Save the DB operation before the audit log
我一直在尝试不使用继承的 Audit.NET Entity Framework 提供程序,https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.EntityFramework#without-inheritance
中对此进行了概述
有没有办法先保存数据库操作,然后创建AuditEvent?我注意到,如果您配置了数据库约束,审计事件仍然会触发,而 DbContext.SaveChangesAsync
会在主线程上抛出异常。
此代码段执行数据库操作,但不触发审计事件:
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));
它工作正常,但审计发生在数据库操作之前。我在这里错过了什么?
在正常情况下,默认情况下,审核保存发生在 DbContext.SaveChanges
returns 之后。您可以查看代码here。
作用域创建在数据库操作之前完成,但是直到上下文完成操作后才会触发审计保存。
你不应该使用第一种方法,你应该只在覆盖时调用 _helper.SaveChanges
。
我一直在尝试不使用继承的 Audit.NET Entity Framework 提供程序,https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.EntityFramework#without-inheritance
中对此进行了概述有没有办法先保存数据库操作,然后创建AuditEvent?我注意到,如果您配置了数据库约束,审计事件仍然会触发,而 DbContext.SaveChangesAsync
会在主线程上抛出异常。
此代码段执行数据库操作,但不触发审计事件:
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));
它工作正常,但审计发生在数据库操作之前。我在这里错过了什么?
在正常情况下,默认情况下,审核保存发生在 DbContext.SaveChanges
returns 之后。您可以查看代码here。
作用域创建在数据库操作之前完成,但是直到上下文完成操作后才会触发审计保存。
你不应该使用第一种方法,你应该只在覆盖时调用 _helper.SaveChanges
。