Понимание EF под капотом. Включить против объединений - PullRequest
5 голосов
/ 16 декабря 2011

Я некоторое время работаю с Entity Framework, но у меня все еще есть "черные дыры" в том, как он работает под капотом.Даже после прочтения нескольких статей я не уверен, что мое понимание верно.


Давайте начнем с вопросов:

  • Как EF Include работает под капотом?
  • В чем различия между Join и Include?
  • Проблемы производительности с Include (ленивая загрузка против активной загрузки, сгенерированные запросы SQL и т.вместо включения и наоборот?

1 Ответ

10 голосов
/ 16 декабря 2011

При запросе EF с помощью выражений linq или lambda операторы объединения нужны только в том случае, если базовая схема не предоставляет FK, и, следовательно, у вас нет свойств навигации для объектов.

С другой стороны, include (готовая загрузка) и отложенная загрузка могут работать только при наличии FK, поскольку используются навигационные свойства.

Базовый sql в обоих случаях будет использовать соединения (так как у sql нет понятия "свойство навигации").

Что касается производительности, это зависит от ситуации. Ленивая загрузка против быстрой загрузки (так в сценарии FK) может быть трудным выбором.

Обычно я использую ленивую загрузку, что полезно, когда у вас большой основной результат, но вам нужно «объединить» данные только нескольких элементов всего набора результатов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...