2015-02-05 6 views
2

Возможно частично отключить LazyLoading? Например:Entity Framework: частично отключить LazyLoading

Если мы имеем: ParentObject - ChildLevel1- ChildLevel2

Я хочу, чтобы отключить LazyLoading только для ChildLevel1, поэтому, когда ParentObject загружены, ChildLevel1 не должны быть загружены автоматически. Но когда я вручную загружу ChildLevel1, для childlevel2 Lazyloading должен функционировать как обычно.

Это возможно?

Спасибо!

ответ

1

Для архитектуры Entity Framework необходимо, чтобы ваши характеристики навигации были помечены как public virtual, а не sealed, чтобы включить ленивую загрузку. Итак, для достижения вашего escenario просто удалите ключевое слово virtual из вашего свойства navegation ChildLevel1 в классе ParentObject.

Предлагаю вам прочитать это post. Другая полезная ссылка, описывающая это, - это MSDN Requirements for Creating POCO Proxies

+0

Но проблема в том, что я не хочу этого постоянно. Только в некоторых случаях я хочу этот сценарий, в других случаях мне нужно LazyLoading работать как обычно для ChildLevel1 тоже. – alex

+0

Извините, но я боюсь, что это невозможно. Если вы определяете свое навигационное свойство virtual, EF во время выполнения создаст новый класс (динамический прокси), полученный из вашего класса ParentObject, и вместо него будет использовать его. Этот новый динамически созданный класс содержит логику для загрузки свойства навигации при первом доступе. Это не то, что вы можете включить или отключить во время выполнения – octavioccl

Смежные вопросы