在 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 中插入与单个查询的关系(没有负载 PostTag并添加关系)

如果我没有正确理解你的问题,你想忽略导航的插入 属性。您可以将集合 属性 的 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 性质,请确保仅将其用于专门为操作分配的短期上下文。