La siguiente respuesta se refiere a la base de datos -Primera o Modelo-Primera flujo de trabajo (los únicos dos flujos de trabajo que estaban disponibles con Entity Framework (versión < = 4,0) cuando se hizo la pregunta). Si está utilizando el flujo de trabajo Code-First (que está disponible desde la versión EF> = 4.1), proceda con ssmith's answer 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 donde se puede establecer la carga diferida generalmente en false:
<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 significa que el generado ObjectContext
(o)en versiones EF más nuevas) debe editarse manualmente (lo que se sobrescribirá con cada actualización de modelo de la base de datos, como señaló ctorx) pero que el elemento EntityContainer
en la sección edmx:ConceptualModels
del archivo EDMX se debe editar agregando el atributo 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.
Perfecto, gracias. –
Esto requiere que modifique el código generado, que se sobrescribirá si modifica su modelo. Considere poner una ObjectContextFactory en su lugar y realice el cambio en la fábrica. De esta forma, solo está configurando la opción una vez y no está cambiando el código generado automáticamente. – ctorx
@ctorx - AFAICT una opción más simple que la fábrica sería simplemente implementar el OnContextCreated parcial para desactivar la carga diferida? ¿O me estoy perdiendo algo? –