首页 > 解决方案 > AzureSQL 和 EF 6 审核记录

问题描述

我目前有一个将 EF 6 绑定到 Azure SQL 后端的系统。每个应用程序实体都有一个字段:createdby、last modified by、deleted by。这些用户字段中的每一个都与用户实体表中的用户相关联。该应用程序适用于一家刚刚将部分内部流程在线迁移的小公司。到目前为止,它运行良好,但现在公司正在显着增长,他们希望添加对业务更重要的功能。所以我必须更新我的审计模式,以便更能反映系统在任何时间点发生的事情(不仅仅是最后一次修改,而是在任何更改发生之前的每次修改和数据快照以及其他各种项目)。

是否有处理捕获审计记录(创建者、修改者、删除者等)的最佳方法?

目前,我正在考虑覆盖 EF6 的 SaveChanges/Async 方法,并捕获正在更改前后保存的记录并将它们序列化并将它们与时间戳和用户 ID 一起保存到 documentdb。我知道这应该可以工作,但是有没有更好的方法我不在我的代码中这样做并且可以在其他地方处理它?我还在考虑可能将序列化实体树发布到 EventGrid,然后让网络作业订阅该 EventGrid 并让它处理审计,但我不确定这是否是矫枉过正。

我知道如果我使用的是 SQL Server,我可以执行 ChangeDataCapture,但这在 AzureSQL 中不可用。

更新:有一个提议的已经回答的问题,它谈到了覆盖 SaveChanges/Async 方法来更新特定跟踪实体的值作为审计的一种方式。这将按照我上面概述的方式在一般意义上起作用。但是,我需要 SQL 中的 ChangeDataCapture 之类的东西,其中保存了对行的每个更改,以便可以创建对记录的历史跟踪,以准确查看发生了什么以及谁做了什么。虽然我相信我计划的处理事情的方式会奏效,但更好的答案如下(接受的答案)。时态表的答案将允许我立即开始记录每一行更改,并从该数据中准确地看到谁在什么时间点做了什么。

标签: azureentity-framework-6azure-sql-database

解决方案


要跟踪“系统在任何时间点发生的事情”,您可以使用 Azure SQL 中内置的功能,即临时表。“时态表是 Azure SQL 数据库的一项新的可编程功能,它允许您跟踪和分析数据更改的完整历史记录,而无需自定义编码”。看:

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-temporal-tables


推荐阅读