如何使用 Linq2Db 跟踪添加、更新或删除实体行的事件?
我需要在此操作中重新计算 db 中的一些数据,最好的方法是什么?
在实体框架上,我将自定义存储库类与自定义添加操作一起使用。可能这是 Linq2Db 中的唯一方法,但我很有趣,可能有一些捕手来通知此事件?
如何使用 Linq2Db 跟踪添加、更新或删除实体行的事件?
我需要在此操作中重新计算 db 中的一些数据,最好的方法是什么?
在实体框架上,我将自定义存储库类与自定义添加操作一起使用。可能这是 Linq2Db 中的唯一方法,但我很有趣,可能有一些捕手来通知此事件?
它不像在 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()
。但正如您从第一个示例中看到的那样,它对复杂的查询没有帮助。