Это не так просто, как в 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()
и т. Д. Но, как видно из первого примера, это не поможет в сложных запросах.