Existe-t-il un moyen de désactiver le chargement différé pour une requête spécifique sur Entity Framework 6? Je veux l'utiliser régulièrement, mais parfois je veux le désactiver. J'utilise des propriétés virtuelles pour les charger paresseux.
définir le code suivant avant la requête que vous souhaitez exécuter
context.Configuration.LazyLoadingEnabled = false;
Vous pouvez désactiver le chargement différé pour une requête spécifique comme suit:
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;
}
}
}
Il se peut que je manque quelque chose ici, mais au lieu de changer la configuration à chaque fois, une autre approche pourrait-elle être d'utiliser .Include()
uniquement sur les requêtes pour lesquelles vous souhaitez effectuer un chargement rapide?
Supposons que nous ayons une classe Product
qui possède une propriété de navigation dans une classe Colour
, vous pouvez charger la Colour
pour une Product
comme ceci -
var product = _context.Products
.Where(p => p.Name == "Thingy")
.Include(x => x.Colours)
.ToList();
Accédez aux propriétés de votre diagramme, recherchez une propriété désignée comme chargement paresseux et désactivez-la.
Si vous utilisez d’abord le code, allez dans votre zone de configuration et désactivez-le à partir de:
this.Configuration.LazyLoadingEnabled = false;
Dans EF Core: context.ChangeTracker.LazyLoadingEnabled = false;
Per cette réponse .
Supposons que vous ayez ceci:
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);
}
Vous auriez toujours le chargement paresseux, malgré le réglage explicite de ne pas. Le correctif est facile, changez le en ceci:
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();
}