实体框架核心-在不使用include()的情况下检索整个数据库集



假设我有以下两个类,它们将表示2个DB表(使用EF Core迁移创建(之间的关系:

public class Author
{
public int Id { get; set; }
public string Name { get; set; }
public Book Book { get; set; }
}
public class Book 
{
public int Id { get; set; }
public String name { get; set; }
public string Genre { get; set; }
}

这两个类作为DbSet添加到我的ApplicationDbContext类中。

当我检索Author记录时,我希望Book对象也被填充信息。似乎我必须以以下方式检索它:

return _context.Author.Include(x => x.Book).ToList(); 

如果我在Author类中有十几个不同的对象,这是否意味着我必须为每个对象链式调用.Include()方法?是否有一个catch-all方法可以告诉我填充Author类中的所有对象?也许是.IncludeAll()之类的?

您可以使用EF核心上启用的延迟加载。这样你就不需要每次都包含它。

基本上你需要添加虚拟关键字到你的书实体:

public class Author{
public int Id {get; set;}
public string Name {get; set; }
public virtual Book Book {get; set; }
}
public class Book {
public int Id {get; set;}
public String name {get; set;}
public string Genre {get; set; }
}

然后,您需要通过安装Microsoft.EntityFrameworkCore.Proxy包并通过调用UseLazyLoadingProxies来启用延迟加载。例如:在startup.cs类中,将dbcontext修改为以下

services.AddDbContext<BloggingContext>(
b => b.UseLazyLoadingProxies()
.UseSqlServer(myConnectionString));

请参阅以下链接以了解延迟加载是如何工作的https://learn.microsoft.com/en-us/ef/core/querying/related-data

最新更新