使用审计跟踪的单个项目 (audit.net)

问题描述 投票:0回答:1

我正在使用库audit.net来跟踪更改。我想使用 sql 数据提供程序和实体框架的扩展。我更新了数据库上下文以从 AuditDbContext 继承。到目前为止它运行良好并将数据存储到数据库。

但我想查询要在前端应用程序中显示的数据。所以我需要通过主键查询。目前它存储在 json 中,但是 json 中存在多个项目,因为审核是针对完整交易的。

有没有办法配置现有的数据提供程序/扩展来为每个更改的数据库对象编写一个审核?此外,公开主键的首选方式是什么……因为每个表的键可以有不同的命名。

.net entity-framework .net-core audit.net
1个回答
0
投票

如果您可以通过实体框架访问审核数据库,请考虑使用 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));
© www.soinside.com 2019 - 2024. All rights reserved.