Стоит ли отключать отложенную загрузку в Entity Framework? - PullRequest
2 голосов
/ 02 ноября 2010

Так что у меня возникло ощущение, что я должен отключить отложенную загрузку по двум причинам:

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

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

Как примечание, я нахожу странным, что свойства отношений 1- * становятся null, а не генерируют исключение при доступе к ним с отложенной загрузкой.Я хочу вернуться и сделать все в отдельных запросах, но я боюсь, что могу пропустить ошибку, когда я интерпретирую еще не загруженное 0- * отношение как null.

Мысли

1 Ответ

7 голосов
/ 02 ноября 2010

Отключите отложенную загрузку, если вы беспокоитесь о производительности, если нет, не надо.

Лично мы отключаем отложенную загрузку, а явно разрешает включение навигационной системы.свойства через контракт интерфейса для наших репозиториев, например:

ICollection<Person> FindSingle(int personId, string[] includeAssociations);

Таким образом, мы затем eager-load ТОЛЬКО навигационные свойства, если вызывающий код специально его запрашивает.Это все равно, что сказать коду: «Эй, если вам нужна дополнительная информация об этом T, спросите его, иначе вы не получите его!».

Что касается 1- *, конечно,свойства нулевые.Навигационные свойства обычно реализуются как ICollection<T> для объектов, поэтому, если там ничего нет, коллекция не создается.

Вы могли бы противодействовать этому эффекту, создавая пустую коллекцию, а не нулевую при выполнении ваших запросов.Однако я предпочитаю нулевую коллекцию экземпляру с 0 экземплярами.

...