【问题标题】: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);
如果我有 PostId 和 TagId ,我如何在实体框架中插入与单个查询的关系(不加载 Post 或 Tag 并添加关系)
【问题讨论】:
标签:
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();