EF:在第二个请求中加载相关实体

时间:2017-06-01 07:59:48

标签: c# entity-framework entity-framework-6 lazy-loading

为了解释这种情况,我将提供虚拟代码

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?

1 个答案:

答案 0 :(得分:1)

EF如何理解您要从内存集合中加载第一作者的书籍。默认情况下,由于延迟加载,它会通过db来获取书籍。

你应该明确加载这样的相关书籍:

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

然后访问firstAuthor.Books