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

时间:2018-12-25 19:18:29

标签: .net-core linq2db asp.net-core-2.2

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

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

在Entity Framework上,我将自定义的Repository类与自定义的Add操作一起使用。也许这是Linq2Db中的唯一方法,但是我正在解释,也许有一些捕获程序可以通知此事件?

1 个答案:

答案 0 :(得分:2)

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

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

insert fromupdate fromdelete可以使用相同的技术。

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

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

SqlStatement分析不是一件容易的事,但有可能。您必须处理SqlUpdateStatementSqlInsertStatementSqlDeleteStatementSqlInsertOrUpdateStatement

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