Как отслеживать Linq2Db добавлять, обновлять, удалять события? - PullRequest
0 голосов
/ 25 декабря 2018

Как я могу отслеживать события при добавлении, обновлении или удалении строк сущностей с помощью Linq2Db?

Мне нужно пересчитать некоторые данные в БД для этих операций, какой способ лучше всего?

Вкл.Entity Framework Я использую свой собственный класс репозитория с пользовательскими операциями добавления.Может быть, это единственный способ в Linq2Db, но мне интересно, может, есть какой-то ловец, чтобы уведомить об этом событии?

1 Ответ

0 голосов
/ 26 декабря 2018

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

...