如何使用Linq2Db跟踪有关添加、更新或删除实体行的事件?
我需要在db中重新计算一些关于这个操作的数据,最好的方法是什么?
在Entity Framework上,我使用自定义Repository类和自定义Add操作。也许这是唯一的方式在Linq2Db,但我很感兴趣,可能有一些捕手通知这一事件?
发布于 2018-12-26 21:04:19
这不像在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。您必须覆盖DataConnection类中的ProcessQuery方法。示例在这里:ConcurrencyCheckTests.cs
您应该返回与传递给方法的语句相同的语句,但是更改了属性statement.IsParameterDependent = true,以防止查询缓存。
SqlStatement分析不是一项微不足道的任务,但却是可能的。你必须处理SqlUpdateStatement,SqlInsertStatement,SqlDeleteStatement,SqlInsertOrUpdateStatement。
第二种选择是编写自己的扩展,它可以操作单个对象,例如UpdateTracked()、DeleteTracked()等。但是从第一个示例中可以看出,它对复杂的查询没有帮助。
https://stackoverflow.com/questions/53925034
复制相似问题