我正在使用库audit.net来跟踪更改。我想使用 sql 数据提供程序和实体框架的扩展。我更新了数据库上下文以从 AuditDbContext 继承。到目前为止它运行良好并将数据存储到数据库。
但我想查询要在前端应用程序中显示的数据。所以我需要通过主键查询。目前它存储在 json 中,但是 json 中存在多个项目,因为审核是针对完整交易的。
有没有办法配置现有的数据提供程序/扩展来为每个更改的数据库对象编写一个审核?此外,公开主键的首选方式是什么……因为每个表的键可以有不同的命名。
如果您可以通过实体框架访问审核数据库,请考虑使用 Entity Framework 数据提供程序。
您可以将其配置为将每个实体修改存储在数据库中的单独行中。
例如,您审核映射到类的表:
[AuditIgnore]
public class AuditLog
{
public int Id { get; set; }
public string AuditJsonData { get; set; }
public string EntityType { get; set; }
public DateTime AuditDate { get; set; }
public string AuditUser { get; set; }
public string TablePrimaryKey { get; set; }
}
配置数据提供程序以将每个实体映射到 AuditLog 表并从审核事件中提取主键:
Audit.Core.Configuration.Setup()
.UseEntityFramework(_ => _
.UseDbContext<MyDbContext>()
.AuditTypeMapper(t => typeof(AuditLog))
.AuditEntityAction<AuditLog>((ev, entry, entity) =>
{
entity.AuditJsonData = entry.ToJson();
entity.EntityType = entry.EntityType.Name;
entity.AuditDate = DateTime.Now;
entity.AuditUser = Environment.UserName;
entity.TablePrimaryKey = entry.PrimaryKey.First().Value.ToString();
})
.IgnoreMatchedProperties(true));