lazy funciona framework disable diferida como carga entity-framework lazy-loading entity-framework-4

entity-framework - funciona - disable lazy loading entity framework 6



Inhabilite la carga diferida de forma predeterminada en Entity Framework 4 (5)

Parece que la carga diferida está habilitada por defecto en EF4. Al menos, en mi proyecto, puedo ver que el valor de

dataContext.ContextOptions.LazyLoadingEnabled

es cierto por defecto. No quiero la carga lenta y no quiero tener que escribir:

dataContext.ContextOptions.LazyLoadingEnabled = false;

cada vez que tengo un nuevo contexto. Entonces, ¿hay alguna manera de desactivarlo por defecto, por ejemplo, en todo el proyecto?



La siguiente respuesta se refiere al flujo de trabajo Primero de la base de datos o Modelo primero (los dos únicos flujos de trabajo disponibles con Entity Framework (versión <= 4.0) cuando se formuló la pregunta). Si está utilizando el flujo de trabajo de Code-First (que está disponible desde la versión de EF> = 4.1) proceda con la answer de ssmith a esta pregunta para una solución correcta.

El archivo edmx tiene en la definición <ConceptualModel> y <EntityContainer> un atributo para la carga diferida en la que puede establecer la carga diferida generalmente como falsa:

<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">

Esto crea la siguiente configuración en el constructor ObjectContext:

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext") { this.ContextOptions.LazyLoadingEnabled = false; OnContextCreated(); }

Mi ejemplo no pretende que el ObjectContext generado (o DbContext en las versiones EF más recientes) se DbContext manualmente (lo cual se sobrescribirá con cada actualización de modelo de la base de datos, como señaló ctorx), sino que el elemento EntityContainer en el edmx:ConceptualModels sección edmx:ConceptualModels del archivo EDMX se debe editar agregando la annotation:LazyLoadingEnabled="false" , ya sea manualmente en un editor XML o en la página de propiedades de la superficie del diseñador donde esta opción también está disponible. Esta modificación del archivo EDMX generará automáticamente la clase de contexto con la opción de carga lenta diferida en el constructor como se muestra arriba. La modificación del archivo EDMX en sí no se sobrescribe cuando el modelo se actualiza desde la base de datos.


Si está modelando primero el código, simplemente elimine la palabra clave virtual en sus propiedades de referencia / objeto. Tener virtual en una referencia habilitará LazyLoading en esa referencia particular.


Si puede estar usando EF4 Code First, ¿sí? Entonces, en la Inicialización de su contexto, está la anulación de ''OnModelCreated''.

En este método, simplemente llamé y configuré la propiedad y todo se resolvió.

protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.Configuration.LazyLoadingEnabled = false; }

Mi modelo ahora es mucho más apetecible. La carga lenta es genial ... pero no cuando no la quieres. Y cuando empiezas a tener referencias circulares, es simplemente ridículo.


También puedes hacerlo desde el diseñador. Simplemente abra el archivo .edmx, haga clic derecho en cualquier lugar del modelo y elija Propiedades. A continuación, establezca LazyLoadingEnabled en falso.