2017-06-01 117 views
0

說明情況負載相關的實體,我會提供虛擬代碼波紋管EF:在第二個請求

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)I負荷db.I所有作者做沒有預先加載,所以我知道,相關書籍將不會被加載。 (2)我使用顯式加載分開加載所有書籍

(3)我嘗試獲得第一作者的書。 但是這裏的懶加載調用db發生了。爲什麼會發生?如果所有實體都加載到(2)中,爲什麼還需要再次調用db?

回答

1

EF如何理解您希望從內存集合中加載第一作者的書籍。默認情況下,由於延遲加載,它會伸出數據庫來獲取圖書。

你應該明確地加載相關的書籍是這樣的:

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

然後訪問firstAuthor.Books

相關問題