0

当我使用实体框架时,我想使用SQL OUTPUT 子句来保留我的数据库中的记录历史记录。为此,EF 需要为 DELETE 语句生成以下示例。

Delete From table1
output deleted.*, 'user name', getdate() into table1_hist
Where field = 1234;

表 table1_hist 具有与 table1 相同的列,增加了两列来存储执行操作的用户的名称和发生时间。但是,EF 似乎没有办法支持这个 SQL Server 的子句,所以我不知道如何实现它。

我查看了 EF 的源代码,并且DELETE命令是在内部静态方法中创建的(GenerateDeleteSql in System.Data.Entity.SqlServer.SqlGen.DmlSqlGenerator class),所以我无法扩展类来添加我想要的行为。看起来我必须根据现有代码重写 SQL Server 提供程序,但这是我想避免的事情......

所以,我的问题是是否有另一种选择(例如扩展)或者我必须重写这个提供程序?

谢谢你。

4

1 回答 1

2

你有没有考虑过

  • 使用存储过程来封装您的数据逻辑
  • 用于捕获数据的删除触发器
  • 变更数据捕获(仅限企业版)
  • 实际上并未删除数据 - 只是在数据中设置一个标志以将其标记为已删除。
于 2013-09-16T14:32:57.623 回答