在 Entity Framework 中添加多对多关系中的实体
Add entity in many to many relationship in Entity Framework
首先我的代码中有多对多关系。
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
,我如何在 entity framework 中插入与单个查询的关系(没有负载 Post
或 Tag
并添加关系)
如果我没有正确理解你的问题,你想忽略导航的插入 属性。您可以将集合 属性 的 state
更改为 'UnChanged'
,以避免插入 属性。
看起来像;
_context.Posts.Add(post);
_context.Entry(post.Tags).State = EntityState.Unchanged;
_context.SaveChanges();
这是隐式连接的缺点之一 table。
仍然可以通过创建两个 "stub" 实体来完成您的要求,将它们附加到上下文(这告诉 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 性质,请确保仅将其用于专门为操作分配的短期上下文。
首先我的代码中有多对多关系。
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
,我如何在 entity framework 中插入与单个查询的关系(没有负载 Post
或 Tag
并添加关系)
如果我没有正确理解你的问题,你想忽略导航的插入 属性。您可以将集合 属性 的 state
更改为 'UnChanged'
,以避免插入 属性。
看起来像;
_context.Posts.Add(post);
_context.Entry(post.Tags).State = EntityState.Unchanged;
_context.SaveChanges();
这是隐式连接的缺点之一 table。
仍然可以通过创建两个 "stub" 实体来完成您的要求,将它们附加到上下文(这告诉 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 性质,请确保仅将其用于专门为操作分配的短期上下文。