Почему создание прокси должно быть включено, если включена отложенная загрузка?
Потому что ленивая загрузка с POCO зависит от создания прокси. Без прокси ленивая загрузка не работает. Поэтому комбинация ProxyCreationEnabled = false
и LazyLoadingEnabled = true
не имеет смысла. Обратная комбинация имеет смысл, если вы хотите работать с прокси-серверами отслеживания изменений, но не хотите использовать отложенную загрузку.
Если я хочу установить lazyloading = false, могу ли я привести свой IEnumerable в слое Service к ObjectQuery, чтобы использовать там .Include ()?
Это зависит от того, что ваш IEnumerable<T>
на самом деле является . Если это результат ToList()
, то нет (потому что List<T>
- это реализация IEnumerable<T>
, но не IQueryable<T>
.). Если вы просто вернете IQueryable<T>
как IEnumerable<T>
, вы, вероятно, можете привести к IQueryable<T>
. (В EF 4.3 вы бы использовали IQueryable<T>
или DbQuery<T>
вместо ObjectQuery<T>
.)
Но imho необходимость такого приведения указывает на то, что что-то не так в вашей архитектуре. Использование Include
является модификацией запроса. Если вашему сервисному слою разрешено изменять запросы, ваш репозиторий должен возвращать IQueryable<T>
- этот тип предназначен для построения и изменения запросов.
Если ваш репозиторий не должен возвращать IQueryable<T>
, вы должны передать выражение или спецификацию в методы репозитория, которые используются для добавления Include
к вашему запросу - внутри метода репозитория, а не в сервисе слой.