How to load the navigation property with EF Core?

前端 未结 3 696
再見小時候
再見小時候 2020-12-11 09:43

In EF6 we had such option:

context.Set().Attach(entity);
context.Entry(entity).Collection(\"NavigationProperty\").Load();

Si

相关标签:
3条回答
  • 2020-12-11 09:53

    See below Code,
    I'm inserting data in UserRef table as well another table which we have many 2 many relationships.

    public void AddUser(User user, IEnumerable<UserSecurityQuestion> securityQuestion, string password)
        {
            var userModel = _mapper.Map<User, UserRef>(user);
            userModel.CreateTime = DateTime.Now;
    
            userModel.UserNewsLetterMaps.ToList().ForEach(u => this._context.UserNewsLetterMaps.Add(u));            
            this._context.RoleRefs.Attach(new RoleRef() { RoleId = (int)user.UserRole, UserRefs = new List<UserRef> { userModel } });
            userModel.ResidenceStatusRefs.ToList().ForEach(u => this._context.ResidenceStatusRefs.Attach(u));
            this._context.UserRefs.Add(userModel);
            this.Save();
        }
    
    0 讨论(0)
  • 2020-12-11 09:59

    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

    0 讨论(0)
  • 2020-12-11 10:09

    Explicit Loading was added in Entity Framework Core v1.1. See Microsoft Docs

    From the 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();
    }
    
    0 讨论(0)
提交回复
热议问题