EF Core — оркестрация перехватчиков/событий SavingChanges и SaveChanges для отслеживания измененных объектов после сохраC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 EF Core — оркестрация перехватчиков/событий SavingChanges и SaveChanges для отслеживания измененных объектов после сохра

Сообщение Anonymous »

TLDR: Как мы можем организовать перехватчик/событие SavingChanges и SaveChanges для отслеживания измененных объектов после сохранения изменений для постобработки?
У нас есть REST API с .NET 7 , EFCore, SQL Server и мультиарендный подход. У нас есть новое требование: после сохранения объектов в DBContext арендатора нам необходимо выполнить их постобработку. Все они. Я знаю, что это необходимо сделать после завершения работы SaveChanges и что мы могли бы просто ставить объект в очередь каждый раз, когда у нас есть вызов saveChanges на уровне сервиса, но, к сожалению, у нас есть устаревший код, и во многих местах для этого потребуется активировать постановку в очередь. Мы хотим сделать это централизованно, поэтому мы подумали об использовании трех разных подходов:
  • Переопределение метода SaveChanges в DBContext
  • Событие SavingChanges/SaveChanges
  • Перехватчик SavingChanges/SaveChanges
Мы уже переопределяем SaveChanges, поэтому этот параметр открыть. Наша проблема заключается в том, что мы создаем контексты во время выполнения, указывающие на разные базы данных, потому что у нас есть мультитенантное программное обеспечение, и нам нужно иметь возможность это делать, поэтому у нас есть фабрика для создания DbContexts, а внедрение слишком большого количества вещей в конструктор DbContext увеличивает сложность фабрики. . Таким образом, переопределение SaveChanges возможно, но сложно.
Все три решения в основном одинаковы: перед SaveChanges мы получаем созданные/измененные объекты, а после выполнения SaveChanges мы помещаем их в очередь. С переопределением SaveChanges это довольно просто: мы получаем измененные объекты и ставим в очередь после выполнения SaveChanges, но с перехватчиками/событиями это сложно, потому что нет линейного выполнения, у нас есть два разных триггера (SavingChanges и SavedChanges). В одном есть DbContext со всеми отслеживаемыми изменениями, а в другом — новое состояние DBContext после сохранения изменений: отслеживаемых изменений нет. Итак, мой вопрос:
Как мы можем организовать перехватчик/события SavingChanges и SaveChanges, чтобы отслеживать изменения и иметь возможность ставить элементы в очередь после того, как изменения были наверняка сохранены? Работают ли перехватчики как-то как одиночки, и поэтому отслеживание измененных объектов требует дополнительной работы, или они создаются как Transient/Scoped, и в каждом запросе легко отслеживать изменения?

Подробнее здесь: https://stackoverflow.com/questions/756 ... nt-to-keep
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»