¿Hay alguna forma de deshabilitar la carga diferida para consultas específicas en Entity Framework 6? Quiero usarlo con regularidad, pero a veces quiero desactivarlo. Estoy usando propiedades virtuales para cargarlas de forma diferida.
c#
entity-framework
lazy-loading
Marco Alves
fuente
fuente
this.Configuration.LazyLoadingEnabled = false;
y luego volver a establecerlothis.Configuration.LazyLoadingEnabled = true;
? Además, puede leer este msdn.microsoft.com/en-us/data/jj574232.aspxRespuestas:
establezca el siguiente código antes de la consulta que desea ejecutar
context.Configuration.LazyLoadingEnabled = false;
fuente
Puede deshabilitar la carga diferida para consultas específicas de la siguiente manera:
public static Cursos GetDatosCursoById(int cursoId) { using (var bd = new AcademyEntities()) { try { bd.Configuration.ProxyCreationEnabled = false; return bd.Cursos.FirstOrDefault(c => c.cursoId == cursoId); } catch (Exception ex) { return null; } } }
fuente
Puede que me esté perdiendo algo aquí, pero en lugar de cambiar la configuración cada vez, podría usar otro enfoque
.Include()
solo en aquellas consultas en las que desea cargar ansiosamente?Supongamos que tenemos una
Product
clase que tiene una propiedad de navegación para unaColour
clase, puede cargar laColour
para unaProduct
como esta:var product = _context.Products .Where(p => p.Name == "Thingy") .Include(x => x.Colours) .ToList();
fuente
Vaya a las propiedades de su diagrama y busque una propiedad designada para carga diferida y desactívela.
Si está usando el código primero, vaya a su área de configuración y deshabilítelo desde allí con:
this.Configuration.LazyLoadingEnabled = false;
fuente
En EF Core:
context.ChangeTracker.LazyLoadingEnabled = false;
Por esta respuesta .
fuente
Otro enfoque para otra versión de EF (Entity Framework 5)
//Note: ContextOptions instead of ChangeTracker or Configuration context.ContextOptions.LazyLoadingEnabled = false;
fuente
context
es unaObjectContext
, el predecesor más o menos obsoleto de su envoltorio,DbContext
.Suponga que tiene esto:
IOrderedQueryable<Private.Database.DailyItem> items; using (var context = new Private.Database.PrivateDb()) { context.Configuration.LazyLoadingEnabled = false; items = context.DailyItem.OrderBy(c => c.sortOrder).OrderByDescending(c => c.isFavorite); }
Aún obtendría carga diferida, a pesar de la configuración explícita de no hacerlo. La solución es fácil, cámbielo a esto:
List<Private.Database.DailyItem> items; using (var context = new Private.Database.PrivateDb()) { // context.Configuration.LazyLoadingEnabled = false; items = context.DailyItem.OrderBy(c => c.sortOrder).OrderByDescending(c => c.isFavorite).ToList(); }
fuente