如何使用Linq2Db跟踪添加,更新或删除实体行的事件?
我需要在此操作中重新计算db中的一些数据,最好的方法是什么?
在Entity Framework上,我将自定义的Repository类与自定义的Add操作一起使用。也许这是Linq2Db中的唯一方法,但是我正在解释,也许有一些捕获程序可以通知此事件?
答案 0 :(得分:2)
这并不像EF中那样容易,因为linq2db使用SQL进行操作,您可以通过一条update语句轻松地更新数千条记录。 例如
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()
等)进行操作。但是如您从第一个示例中看到的那样,它对复杂的查询没有帮助。