web-dev-qa-db-de.com

Entity Framework: Wie kann man Lazy Loading für eine bestimmte Abfrage deaktivieren?

Gibt es eine Möglichkeit, das verzögerte Laden für bestimmte Abfragen in Entity Framework 6 zu deaktivieren? Ich möchte es regelmäßig verwenden, aber manchmal möchte ich es deaktivieren. Ich verwende virtuelle Eigenschaften, um sie faul zu laden.

64
Marco Alves

setzen Sie den folgenden Code vor der Abfrage, die Sie ausführen möchten

context.Configuration.LazyLoadingEnabled = false;
58
Karthik Ganesan

Sie können das Lazy-Laden wie folgt für eine bestimmte Abfrage deaktivieren:

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

Ich vermisse hier vielleicht etwas, aber anstatt die Konfiguration jedes Mal zu ändern, könnte es eine andere Möglichkeit sein, .Include() nur für Abfragen zu verwenden, bei denen Sie das eifrige Laden möchten.

Angenommen, wir haben eine Product-Klasse, die eine Navigationseigenschaft zu einer Colour-Klasse hat, könnten Sie die Colour für eine Product-Datei wie folgt laden:

var product = _context.Products
    .Where(p => p.Name == "Thingy")
        .Include(x => x.Colours)
        .ToList();
16
Parrybird

Gehen Sie zu Ihren Diagrammeigenschaften und suchen Sie nach einer Eigenschaft, die für das langsame Laden bestimmt ist, und deaktivieren Sie sie.

Wenn Sie zuerst Code verwenden, gehen Sie in Ihren Konfigurationsbereich und deaktivieren Sie ihn von dort aus mit: 

this.Configuration.LazyLoadingEnabled = false;
15
Juan

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

Per diese Antwort .

1
Matt Jenkins

Angenommen, Sie haben folgendes:

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);
}

Sie würden trotz der expliziten Einstellung von nicht zu faul laden. Das Update ist einfach, ändern Sie es so:

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