【发布时间】:2021-09-07 00:59:10
【问题描述】:
EF Core 最近添加了显式加载对象的导航属性;
using (var db = new BloggingContext()) {
var blog = db.Blogs.Find(1);
db.Entry(blog).Collection(b => b.Posts).Load();
db.Entry(blog).Reference(b => b.Author).Load();
}
https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/
这显然很冗长,我不希望每次都进行这些检查。是否有任何扩展方法或补充 NuGet 包可以解决这些缺点?
我知道这是一个常见问题,但不是 EF Core。
【问题讨论】:
-
.Include(..)不能在核心中工作吗? IE。db.Blogs.Include(m => m.Posts).Include(m => m.Author).Find(1); -
是的,但我试图绕过明确指定我想要的实体。 docs.microsoft.com/en-us/ef/core/querying/related-data
-
啊,抱歉,所以你的问题是如何从该模型加载所有导航道具。我误读了标题,并试图让它更简单。我可以想出一种简单的方法来使用反射,但不确定即使对于旧 EF 也有内置方法。编辑:即使您链接到的问题也适用于 Core,因为您仍在指定要加载的内容。 EDIT2:我可能是错的,但我认为
.Include(..)也比单独加载更快,因为它们将构成初始查询运行的一部分。 -
以这种方式加载它们与仅使用延迟加载大致相同(将为每个导航属性进行单独的查询)。那你为什么要这么做?
-
@IvanStoev 我想我最好不要再评论\回答 EF Core 问题,因为即使是基本假设也失败了 :)