5

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

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

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

4

1 回答 1

4

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

db.SomeEntities.Where(e => e.IsExpired)
  .Set(e => e.ExpirationDate, e => Sql.CurrentTimestamp)
  .Update();

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

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

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

SqlStatement分析不是微不足道的任务,而是可能的。你必须处理SqlUpdateStatement, SqlInsertStatement, SqlDeleteStatement, SqlInsertOrUpdateStatement.

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

于 2018-12-26T13:04:19.010 回答