2017-02-02 2 views
7

Eigentlich habe ich eine Linq-Abfrage, die eine Entität und einige seiner Navigationseigenschaften abrufen.AsNoTracking() und Include

context.MyEntity 
    .AsNoTracking() 
    .Include(i=> i.Nav1) 
    .Include(i=> i.Nav2) 
    .Where(x=> x.Prop1==1) 
    .FirstOrDefault(); 

Jetzt Meine Frage ist:

genug Ist diese Abfrage für nicht MyEntity und NAV1, Nav2 verfolgen oder müssen AsNoTracking für jede Navigationseigenschaft hinzuzufügen. wie folgt:

+1

Sie brauchen nur 'AsNoTracking' einmal pro Abfrage, also ist Ihr 1. Beispiel korrekt. Ich glaube, der zweite wird eine Laufzeitausnahme werfen (nicht sicher, welche). – Igor

+0

Wenn Sie mehrere LINQ-Methoden verketten, übergeben Sie die zurückgegebene Sequenz immer von der vorherigen Methode an die folgende. Nach 'AsNoTracking' haben Sie eine Abfrage, in der die zurückgegebenen Entitäten nicht zwischengespeichert werden –

+0

Tks für Ihre Hilfe –

Antwort

4

Verwenden Sie AsNoTracking, nachdem Sie alle Abfrageparameter abgeschlossen haben, bevor Sie die Daten in den Speicher verschieben. In diesem Beispiel möchten Sie:

context.MyEntity 
    .Include(i=> i.Nav1) 
    .Include(i=> i.Nav2) 
    .Where(x=> x.Prop1==1) 
    .AsNoTracking() 
    .FirstOrDefault(); 

Alle untergeordneten Objekte des Mutterunternehmens werden nicht verfolgt werden.