插入EF 7中的联结表

时间:2016-03-03 19:11:07

标签: ef-code-first many-to-many relational-database entity-framework-core

由于Entity Framework 7尚未支持多对多关系,

我正在解决此问题link

以下是上述链接中的代码:

class MyContext : DbContext
{
    public DbSet<Post> Posts { get; set; }
    public DbSet<Tag> Tags { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<PostTag>()
            .HasKey(t => new { t.PostId, t.TagId });

        modelBuilder.Entity<PostTag>()
            .HasOne(pt => pt.Post)
            .WithMany(p => p.PostTags)
            .HasForeignKey(pt => pt.PostId);

        modelBuilder.Entity<PostTag>()
            .HasOne(pt => pt.Tag)
            .WithMany(t => t.PostTags)
            .HasForeignKey(pt => pt.TagId);
    }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public List<PostTag> PostTags { get; set; }
}

public class Tag
{
    public string TagId { get; set; }

    public List<PostTag> PostTags { get; set; }
}

public class PostTag
{
    public int PostId { get; set; }
    public Post Post { get; set; }

    public string TagId { get; set; }
    public Tag Tag { get; set; }
}

问题

如何将TagPost相关联? 换句话说,如何在联结表中添加一行?

1 个答案:

答案 0 :(得分:0)

以下是another SO question对我提出的方法的解答。

创建您的Tag实例并将其添加到代码中。对Post实例执行相同操作,初始化其PostTags导航属性,并将其添加到Posts
然后创建PostTag实例,并使用PostTag实例对其进行初始化 最后调用SaveChangesSaveChangesAsync方法。

这将允许EF在将所有涉及的实体写入基础数据库之前正确管理ID属性。