Есть ли какой-нибудь способ узнать, находится ли EF4 в настоящее время в процессе гидратации Самотрекинга (STE)

Мне нужно выполнить некоторую настраиваемую логику в моих публичных геттерах и установщиках EF 4 STE. Однако я хочу, чтобы эта пользовательская логика выполнялась только в том случае, если EF в настоящее время не увлажняет сущность.

Существуют ли какие-либо встроенные флаги, состояния или состояния объектов, которые можно проверить, чтобы определить, выполняет ли EF в настоящее время гидратацию объекта STE от моего имени?

Я не выполняю отложенную загрузку, поэтому мы выполняем загрузку всех данных за один раз. Я надеюсь, что мне не нужно менять шаблоны Entity T4, чтобы добавить инфраструктуру для отслеживания этого материала самостоятельно.

Спасибо нейт

1 ответ

Нет, такого флага нет, но вы можете попробовать сделать это следующим образом:

  • Определите интерфейс для всех ваших STE с помощью методов SavingStarted, SavingFinished
  • Реализуйте эти методы в шаблоне STE, чтобы иметь возможность включать и выключать ваш флаг
  • Изменить определение геттеров и сеттеров в шаблоне STE для работы с флагом
  • Переопределите SaveChanges в вашем ObjectContext.
  • Перебирайте измененные объекты, которые можно преобразовать в ваш интерфейс, и вызывайте SavingStarted.
  • Вызовите базу. SaveChanges
  • Снова итерация по этим объектам и вызов SavingFinished

Единственная проблема заключается в том, что эти методы будут частью открытого интерфейса STE. Чтобы избежать этого, вы можете реализовать эти методы в ObjectContext и получить доступ к внутреннему свойству STE с флагом. Это возможно только в том случае, если STE и ObjectContext находятся в одной сборке или используется InternalsVisibleTo.

Другие вопросы по тегам