如何使用EF Core加载导航属性?

Rom*_*kij 3 entity-framework entity-framework-core

在EF6中我们有这样的选择:

context.Set<TEntity>().Attach(entity);
context.Entry(entity).Collection("NavigationProperty").Load();
Run Code Online (Sandbox Code Playgroud)

由于EF Core"100%严格打字",他们已经删除了Collection功能.但应该用什么呢?

补充:我的意思是如何为ATTACHED实体加载包含/"导航集合属性"?

Sam*_*ath 9

你有2种方法.

1.急切加载

例如

var blogs = context.Blogs
    .Include(blog => blog.Posts)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

2.明确加载

例如

var blog = context.Blogs
    .Single(b => b.BlogId == 1);

context.Posts
    .Where(p => p.BlogId == blog.BlogId)
    .Load();
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读更多相关信息:加载相关数据

更新:

您可以将TrackGraph API用于该用例.这是链接:添加/附加的图形行为

另一个链接:DbSet.Add/Attach和图形行为


Mog*_*og0 5

显式加载已添加到Entity Framework Core v1.1中。请参阅Microsoft Docs

从文档:

using (var context = new BloggingContext())
{
    var blog = context.Blogs
    .Single(b => b.BlogId == 1);

    context.Entry(blog)
        .Collection(b => b.Posts)
        .Load();

    context.Entry(blog)
        .Reference(b => b.Owner)
        .Load();
}
Run Code Online (Sandbox Code Playgroud)