为了解释这种情况,我将提供虚拟代码
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)我从db加载所有作者。我没有急切加载就这样做了所以我知道相关书籍不会被加载。 (2)我使用Explicit Loading
分别加载所有书籍(3)我试着获得第一本作者的书。 但是这里对db的延迟加载调用发生了。为什么会发生?如果所有实体都加载到(2)中,为什么还需要再调用db?
答案 0 :(得分:1)
EF如何理解您要从内存集合中加载第一作者的书籍。默认情况下,由于延迟加载,它会通过db来获取书籍。
你应该明确加载这样的相关书籍:
var firstAuthor = authors.First();
context.Entry(firstAuthor)
.Collection(a => a.Books)
.Load();
然后访问firstAuthor.Books