【问题标题】:Add entity in many to many relationship in Entity Framework在实体框架中以多对多关系添加实体
【发布时间】:2017-12-24 13:27:26
【问题描述】:

我的代码中首先存在多对多关系。

public class Post
{
    public int Id { get; set; }
    public ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    public int Id { get; set; }
    public ICollection<Post> Posts { get; set; }
}

modelBuilder.Entity<Post>().HasMany(c => c.Tags).WithMany(a => a.Posts);    

如果我有 PostIdTagId ,我如何在实体框架中插入与单个查询的关系(不加载 PostTag 并添加关系)

【问题讨论】:

    标签: asp.net-mvc entity-framework ef-code-first


    【解决方案1】:

    这是隐式联结表的缺点之一。

    仍然可以通过创建两个“存根”实体,将它们附加到上下文(这告诉 EF 它们存在)并将其中一个添加到另一个的集合中来完成您的要求:

    using (var db = new YourDbContext())
    {
        var post = db.Posts.Attach(new Post { Id = postId });
        var tag = db.Tags.Attach(new Tag { Id = tagId });
        post.Tags = new List<Tag> { tag };
        db.SaveChanges();
    }
    

    由于上述技术的 hack-ish 特性,请确保仅在专门为该操作分配的短期上下文中使用它。

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,您想忽略导航属性的插入。您可以将集合属性的state 更改为'UnChanged' 以避免插入该属性。

      它看起来像;

      _context.Posts.Add(post);
      
      _context.Entry(post.Tags).State = EntityState.Unchanged;
      
      _context.SaveChanges();
      

      【讨论】:

        猜你喜欢
        • 2017-02-14
        • 1970-01-01
        • 2017-01-28
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        相关资源
        最近更新 更多