Есть ли какой-нибудь способ узнать, находится ли 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.