如何跟踪 Linq2Db 添加、更新、删除事件?

Dmi*_*nin 5 linq2db .net-core asp.net-core-2.2

如何使用 Linq2Db 跟踪添加、更新或删除实体行的事件?

我需要在此操作中重新计算数据库中的一些数据,最好的方法是什么?

在实体框架上,我使用自定义存储库类和自定义添加操作。也许这是 Linq2Db 中的唯一方法,但我很有趣,也许有一些捕手来通知这个事件?

Svy*_*liv 6

这并不像在 EF 中那么容易,因为 linq2db 使用 SQL 进行操作,您可以通过单个更新语句轻松更新数千条记录。例如

db.SomeEntities.Where(e => e.IsExpired)
  .Set(e => e.ExpirationDate, e => Sql.CurrentTimestamp)
  .Update();
Run Code Online (Sandbox Code Playgroud)

相同的技术可用于insert from, update from, delete

但是有可能在执行之前捕获 SQL AST。您必须重写类ProcessQuery中的方法DataConnection。示例在这里:ConcurrencyCheckTests.cs

您应该返回传递给方法的相同语句,但属性已更改,statement.IsParameterDependent = true以防止查询缓存。

SqlStatement分析不是微不足道的任务,但却是可能的。你必须处理SqlUpdateStatement、、、。SqlInsertStatementSqlDeleteStatementSqlInsertOrUpdateStatement

第二个选项是编写自己的扩展来操作单个对象,例如UpdateTracked()DeleteTracked()等。但是正如您从第一个示例中看到的那样,它对复杂的查询没有帮助。