Отключить отложенную загрузку по умолчанию в Entity Framework 4 в
Кажется, что ленивая загрузка включена по умолчанию в EF4. По крайней мере, в моем проекте, я вижу, что значение
dataContext.ContextOptions.LazyLoadingEnabled
значение true по умолчанию. Я не хочу ленивой загрузки и не хочу писать:
dataContext.ContextOptions.LazyLoadingEnabled = false;
каждый раз, когда я получаю новый контекст. Так есть ли способ отключить его по умолчанию, скажем, по всему проекту?
5 ответов:
следующий ответ относится к Database-First или Модель-Первый рабочий процесс (только два рабочих процесса, которые были доступны с Entity Framework (версия Code-First рабочий процесс (который доступен с версии EF >= 4.1) перейдите к ssmith's ответ к этому вопросу для правильного решения.
файл edmx в
<ConceptualModel>
и<EntityContainer>
определение атрибута для ленивой загрузки, где вы можете установить ленивую загрузку обычно в 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 файл должен быть отредактирован путем добавленияannotation:LazyLoadingEnabled="false"
атрибут-либо вручную в Редакторе XML, либо на странице свойств поверхности конструктора, где также доступна эта опция. Эта модификация файла EDMX автоматически создаст класс контекста с отключенной опцией ленивой загрузки в конструкторе, как показано выше. Сама модификация файла EDMX не перезаписывается при обновлении модели из базы данных.
Я написал небольшой пример показывает как новые функции ленивой загрузки работают с кодом EF First. Достижение того, что вы хотите в первой модели кода, - это просто вопрос добавления одной строки в конструктор DbContext, например:
public BlogContext() { this.Configuration.LazyLoadingEnabled = false; }
Если вы можете использовать код EF4 в первую очередь, да? Итак, в инициализации вашего контекста есть переопределение "OnModelCreated".
в этом методе я просто вызвал и установил свойство, и все было решено.
protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.Configuration.LazyLoadingEnabled = false; }
моя модель теперь гораздо более приемлема. Ленивая загрузка-это здорово...но не тогда, когда ты этого не хочешь. И когда вы начинаете иметь циклические ссылки, это просто смешно.