【问题标题】:How do I specify the name of a joiner table in an EF many to many relationship?如何在 EF 多对多关系中指定连接器表的名称?
【发布时间】:2017-11-15 02:09:08
【问题描述】:

我正在使用 EF Code First 6.2 和 Dev Express XAF 在 DevExpress.Persistent.BaseImpl.EF 中,Event 类与 Resource 类具有多对多关系。

如果我使用带有 Code First 的 Dev Express 向导创建一个新项目,那么连接表将被称为 ResourceEvents

然而,在某些迁移中,我的连接表被重命名为 EventResources。

如何将其设置回应有的状态? 我尝试将以下内容添加到 DBContext

        modelBuilder.Entity<Event>().HasMany(x => x.Resources).WithMany(x => x.Events)
            .Map(
                x =>
                {
                    x.MapLeftKey("Event_ID");
                    x.MapRightKey("Resource_Key");
                    x.ToTable("ResourceEvents");
                });

这会导致要创建迁移

  public partial class ev : DbMigration
    {
  public override void Up()
    {
        DropPrimaryKey("dbo.ResourceEvents");
        AddPrimaryKey("dbo.ResourceEvents", new[] { "Event_ID", "Resource_Key" });
    }

    public override void Down()
    {
        DropPrimaryKey("dbo.ResourceEvents");
        AddPrimaryKey("dbo.ResourceEvents", new[] { "Resource_Key", "Event_ID" });
    }

}

运行迁移会导致错误

Cannot find the object "dbo.ResourceEvents" because it does not exist or you do not have permissions.

【问题讨论】:

    标签: entity-framework-6 entity-framework-migrations


    【解决方案1】:

    诀窍是在迁移中添加代码以重命名表

    RenameTable(name: "dbo.EventResources", newName: "ResourceEvents");
    

    在让 EF 知道表的名称应该是什么方面,拥有流畅的 API 似乎很重要。

    【讨论】:

      猜你喜欢
      • 2021-12-30
      • 2012-03-22
      • 1970-01-01
      • 2012-04-08
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      相关资源
      最近更新 更多