使用 Entity Framework Core 进行审计跟踪

Pie*_*rto 2 sql-server audit entity-framework-core asp.net-core audit.net

我有一个在 SQL Server 数据库上使用实体框架核心的 ASP.NET 核心 2.0。

我必须跟踪和审计用户对数据所做的所有事情。我的目标是拥有一个自动机制来记录所有正在发生的事情。

例如,如果我有表 Animals,我想要一个并行表“Audit_animals”,您可以在其中找到有关数据、操作类型(添加、删除、编辑)和创建此操作的用户的所有信息。

这次我已经在Django + MySQL中做了,但现在环境不同了。我发现了这一点,看起来很有趣,但我想知道是否有更好的方法,以及哪种方法是在 EF Core 中执行此操作的最佳方法。

更新

我正在尝试这个并且发生了一些事情,但我有一些问题。

我加了这个:

  1. services.AddMvc().AddJsonOptions(options => {
    
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            }); 
    
    Run Code Online (Sandbox Code Playgroud)
  2. public Mydb_Context(DbContextOptions<isMultiPayOnLine_Context> options) : base(options)
    {
        Audit.EntityFramework.Configuration.Setup()
            .ForContext<Mydb_Context>(config => config
                .IncludeEntityObjects()
                .AuditEventType("Mydb_Context:Mydb"))
            .UseOptOut()
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. public MyRepository(Mydb_Context context)
    {
        _context = context;
        _context.AddAuditCustomField("UserName", "pippo");
    
    }
    
    Run Code Online (Sandbox Code Playgroud)

我还创建了一个表来插入审计(只有一个表来测试这个工具),但我唯一得到的是你在图像中看到的。包含我创建的数据的 json 文件列表.... 为什么?

在此处输入图片说明

Chr*_*att 6

阅读文档

事件输出

要配置输出持久性机制,请参阅配置数据提供者部分。

然后,在Configuration的文档中:

如果您未指定数据提供程序,FileDataProvider则将使用默认值将事件作为 .json 文件写入当前工作目录。(强调我的)

总而言之,请按照文档配置您要使用的数据提供程序。


the*_*000 5

如果要将审计表 (Audit_Animals) 映射到与审计的 Animals 表相同的 EF 上下文,则可以使用包含在同一库中的EntityFramework 数据提供程序Audit.EntityFramework

检查这里的文档:

实体框架数据提供者

如果您计划将审计日志存储在与审计实体相同的数据库中,则可以使用 EntityFrameworkDataProvider. 如果您计划将每个实体类型的审计跟踪存储在具有类似结构的表中,请使用此选项。

还有另一个可以以类似方式审核 EF 上下文的库,请查看:zzzprojects/EntityFramework-Plus

不能推荐其中一个,因为它们提供不同的功能(我是 audit.net 库的所有者)。