Entity Framework数据迁移(Migrations)新增多对多关系,为什么如下代码不生成中间表?

发布于 2022-09-03 09:36:07 字数 1298 浏览 17 评论 0

数据库中有一张Blog表,还有一张Tag表,它们有各自属性。而一开始生成数据库而是直接通过EF生成的,也没有做过数据迁移。

现在希望把BlogTag进行多对多关系进行关联,由于线上数据库应用于生产环境,已经有了真实数据,所以只能使用EF数据迁移来完成了。

于是我在model层的Blog.cs里新增了如下代码:

    public virtual IList<Tag> Tags { get; set; }

然后在model层的Tag.cs里新增了如下代码:

    public virtual ICollection<Blog> Blogs { get; set; }

然后开始操作数据迁移,生成的数据迁移为代码如下:

    public override void Up()
    {
        //往dbo.blog表里新增了一列Tag_TagId
        AddColumn("dbo.Blogs", "Tag_TagId", c => c.String(maxLength: 128));
        //往dbo.Tags表里新增了一列Blog_BlogId1
        AddColumn("dbo.Tags", "Blog_BlogId1", c => c.String(maxLength: 128));
        
        CreateIndex("dbo.Blogs", "Tag_TagId");
        CreateIndex("dbo.Tags", "Blog_BlogId1");
        
        AddForeignKey("dbo.Blogs", "Tag_TagId", "dbo.Tags", "TagId");
        AddForeignKey("dbo.Tags", "Blog_BlogId1", "dbo.Blogs", "BlogId");
    }

由这段代码可见BlogTag表只是各自新增了外键进行1对1的关联,而不是我希望的多对多关系,还请各位大神指点。

对于这个问题解决方案我的猜想是:是不是对EF的多对多映射关系处理的不正确,需要加一些Attribute做下映射?。

万分感谢,祝好。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空气里的味道 2022-09-10 09:36:07

在别的地方找到了解决方案。

DBContextOnModelCreating写:

            modelBuilder.Entity<blog>()
                .HasMany(a => a.tags)
                .WithMany(t => t.Blogs)
                .Map(m =>
                {
                    m.ToTable("blog_tag"); //中间关系表表名
                    m.MapLeftKey("tagID"); //设置Activity表在中间表主键名
                    m.MapRightKey("blogID"); //设置Trip表在中间表主键名
                });

然后再生成迁移(或者自己在up里创blog_tag表和设置外键关系)。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文