Есть ли какой-нибудь способ узнать, находится ли EF4 в настоящее время в процессе гидратации Самоконтроля - PullRequest
0 голосов
/ 11 января 2011

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

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

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

Спасибо, Нейт

1 Ответ

0 голосов
/ 11 января 2011

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

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

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

...