Кажется, что ленивая загрузка включена по умолчанию в EF4. По крайней мере, в моем проекте, я вижу что значение
dataContext.ContextOptions.LazyLoadingEnabled
верно по умолчанию. Я не хочу ленивую загрузку, и я не хочу должным быть писать:
dataContext.ContextOptions.LazyLoadingEnabled = false;
каждый раз я получаю новый контекст. Так есть ли способ выключить его по умолчанию, скажем, через целый проект?
Следующий ответ относится к рабочему процессу Database-First или Model-First (единственные два рабочих процесса, которые были доступны с Entity Framework (версия <= 4.0) когда был задан вопрос). Если вы используете рабочий процесс Code-First (который доступен с версии EF> = 4.1), перейдите к ответу ssmith на этот вопрос для правильного решения.
Файл edmx имеет в определении
и
атрибут для отложенной загрузки, где вы можете установить для ленивой загрузки значение false:
<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">
Это создает следующий параметр в конструкторе ObjectContext:
public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
{
this.ContextOptions.LazyLoadingEnabled = false;
OnContextCreated();
}
Мой пример не означает, что сгенерированный ObjectContext
(или DbContext
в более новых версиях EF) должен редактироваться вручную (который будет перезаписан при каждом обновлении модели из базы данных, как указал ctorx), но элемент EntityContainer
в разделе edmx: ConceptualModels
файла EDMX следует редактировать, добавляя аннотацию : LazyLoadingEnabled = "false"
атрибут - вручную в редакторе XML или на странице свойств в области конструктора, где также доступен этот параметр, щелкните правой кнопкой мыши EDMX, затем выберите Свойства.
Эта модификация файла EDMX автоматически сгенерирует класс контекста с отключенной опцией отложенной загрузки в конструкторе, как показано выше. Сама модификация файла EDMX не перезаписывается при обновлении модели из базы данных.