2017-06-01 2 views
0

die Situation erklären werde ich Blindkode untenEF: Last verbundenen Unternehmen in der zweiten Anfrage

bieten
public class Author 
{ 
    public int AuthorId { get; set; } 
    public virtual ICollection<Book> Books { get; set; } 
} 

public class Book 
{ 
    public int BookId { get; set; } 
    public virtual Author Author { get; set; }  
} 

var authors = context.Authors.ToList();  (1) 
context.Books.Load();      (2) 
var firstAuthorBook = authors.First().Book; (3) 

(1) Ich lade alle Autoren von db.I tun es ohne eifrig Laden, damit ich weiß, dass Bücher zum Thema wird nicht geladen. (2) Ich lade alle Bücher separat mit Explizitem Laden

(3) Ich versuche, das erste Buch zu bekommen. Aber hier ist der Lazy Load-Aufruf zu db passiert. Warum es passiert ist Warum brauche ich einen weiteren Aufruf von db, wenn alle Entitäten in (2) geladen wurden?

Antwort

1

Wie EF versteht, dass Sie die Bücher des ersten Autors aus der Speichersammlung laden möchten. Standardmäßig wird db aufgerufen, um Bücher wegen Lazy-Loads zu erhalten.

Sie explizit ähnliche Bücher wie diese geladen werden soll:

var firstAuthor = authors.First(); 
context.Entry(firstAuthor) 
     .Collection(a => a.Books) 
     .Load(); 

Dann Zugriff firstAuthor.Books

Verwandte Themen