【发布时间】:2020-06-08 13:39:12
【问题描述】:
我了解时态表旨在为您提供数据的时间点视图。我正在使用临时表进行审计。我有以下时态表。
让我们假设这是 Temporal 表的当前状态:
ID RoleID UserID ModifiedBy
------------------------------------------
1 11 1001 foo@example.com
2 22 1001 foo@example.com
3 33 1002 bar@example.com
4 11 1003 foo@example.com
我有一个使用 EF Core 的 Web 应用程序。我的 EF 代码总是将 ModifiedBy 设置为当前登录的用户。我以bar@example.com 登录应用程序并删除了一条ID 为2 的记录。SQL Server 将按预期自动将删除的记录插入历史记录表中,并将ModifiedBy 保持为foo@example.com,因为那是ModifiedBy 列的时间点值。
但是现在系统不知道是谁删除了该行。在这种情况下,bar@example.com 是实际删除该行的人。如何捕获删除记录的用户?我在这里有什么选择?
【问题讨论】:
-
也许,添加一个通常为 Null 的 DelCode 列,并且在处理删除事务时,proc 将值更新为 1,从而导致 ModifiedBy 使用您的 UserID 进行更新,并且记录存储在历史记录中DelCode=1 和 ModifiedBy=yourUserID
-
您可以在历史记录表中添加 DeletedBy 列并在删除时填充它。
-
@Nikolaus 你不能直接更新修改历史表
-
@donPablo 我没有使用存储过程。我正在使用 EF。
-
出于这个原因,我们使用软删除,因为它有一个“IsDeleted”位列。因此,要删除记录,我们只需设置 IsDeleted 并捕获 ModifiedBy 值。在 EF 中,您可以将其配置为在对表的任何查询中排除软删除的记录。
标签: sql-server tsql ef-core-2.2 temporal-tables