2016-10-23 3 views
1

folgende Daten Modell Angenommen:EF Lazy-Loading: Artikel in Navigationseigenschaft ohne das Laden es

class Garden 
{ 
    int ID; 
    ICollection<Tree> Trees; 
    string Address; 
} 
class Tree 
{ 
    public int ID; 
    public float Size; 
} 

Lassen Sie uns Pflanze einige Bäume:

var gardens = dbContext.Gardens.Take(10).ToList(); 
foreach (var g in gardens) 
    g.Trees.Add(new Tree()); 

Aber jetzt, jede Bezugnahme auf g.Trees löst ein Datenbankabfrage wegen Lazy-Loading. Ich könnte .Include(garden => garden.Trees) tun, wenn ich die Gärten hole, aber dann übertrage ich alle vorhandenen Bäume.

Ich könnte eine GardenID-Spalte in Tree erstellen, und fügen Sie dann einfach die Struktur zu meinem DbContext, ohne die Navigationseigenschaft zu berühren. Aber jetzt muss ich meinen DbContext weitergeben.

Wie kann ich den Baum zum Garten hinzufügen, ohne eine Lazy-Load der Navigationseigenschaft auszulösen und ohne unnötige Daten zu übertragen?

+0

Entweder make 'Trees' Eigenschaft nicht virtuell, oder' dbContext' Lazy loading ausschalten. –

+0

Haben Sie in der Kategorie "Baum" eine Navigation zum Garten? – Eldho

Antwort

1

Wenn Sie zuerst die DB verwenden, dann besteht die einzige Option darin, das Lazy Loading für den gesamten Kontext zu deaktivieren. ctx.Configuration.LazyLoadingEnabled = false

Wenn mit Code Zuerst dann sicher Zeichen Ihr ICollection<Tree> Trees nicht virtual ist machen, die dann verzögertes Laden für diese Sammlung nur deaktiviert.

Verwandte Themen