Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to load the navigation property with EF Core?

In EF6 we had such option:

context.Set<TEntity>().Attach(entity);
context.Entry(entity).Collection("NavigationProperty").Load();

Since EF Core "goes 100% strictly typed" they have removed Collection function. But what should be used instead?

Added: I mean how to load includes/"navigation collection properties" for ATTACHED entity?

like image 466
Roman Pokrovskij Avatar asked Oct 16 '16 00:10

Roman Pokrovskij


1 Answers

You have 3 methods:

1. Eager loading

e.g.

var blogs = context.Blogs
    .Include(blog => blog.Posts)
    .ToList();

2. Explicit loading

e.g.

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

context.Posts
    .Where(p => p.BlogId == blog.BlogId)
    .Load();

3. Lazy loading (as of EF Core 2.1)

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLazyLoadingProxies()
        .UseSqlServer(myConnectionString);

You can read more about it here : Loading Related Data

Update :

You can use TrackGraph API for that use case.Here is the link : graph behavior of Add/Attach

Another link : DbSet.Add/Attach and graph behavior

like image 58
Sampath Avatar answered Sep 16 '22 19:09

Sampath