web-dev-qa-db-fra.com

Entity Framework: Comment désactiver le chargement différé pour une requête spécifique?

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.

64
Marco Alves

définir le code suivant avant la requête que vous souhaitez exécuter

context.Configuration.LazyLoadingEnabled = false;
58
Karthik Ganesan

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;
        }
    }
}
38
William Ballesteros

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();
16
Parrybird

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;
15
Juan

Dans EF Core: context.ChangeTracker.LazyLoadingEnabled = false;

Per cette réponse .

1
Matt Jenkins

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();
}
0
Stronghold