【问题标题】:How can we rename the primary key of a table in FluentMigrator?我们如何重命名 FluentMigrator 中表的主键?
【发布时间】:2013-12-13 18:55:30
【问题描述】:

我需要通过FluentMigrator 重命名现有表的主键,以便自动映射器可以自动检测该列。

对于大多数列,这是一个简单的1)删除该列上的任何外键约束@​​987654323@删除该列的索引并3)重命名该列。我曾经这样做过:

Delete.ForeignKey("foreignkeyconstraint").OnTable("mytable");
Delete.Index("UserId").OnTable("mytable");
Rename.Column("UserId").OnTable("mytable").To("UserInfo_id");

但是,这似乎不适用于主键,因为我无法删除该列上自动创建的索引。用FluentMigrator重命名主键列的正确方法是什么?

【问题讨论】:

    标签: c# mysql fluent-migrator


    【解决方案1】:

    使用以下方法调用重命名您的主键 (SQL Server)

    Execute.Sql("EXEC sp_rename N'[Current_Primary_Key_Name]', '[New_Primary_Key_Name]', 'object';");
    

    【讨论】:

      【解决方案2】:

      只要它不是标识(自动递增)列,这样的东西就应该可以工作:

      Delete.PrimaryKey("PRIMARY KEY").FromTable("mytable");
      

      【讨论】:

      • 在撰写本文时,如果主键是表上唯一的聚集索引,这将在 Azure 数据库中失败。在这个阶段我还没有找到解决方法,只是保持主键的名称不变。不过,这可能不是问题的解决方案。
      • labilbeanswer 的优点之一是sp_rename 将为您处理。见MSDN
      • @MichaelMinton 不适用于 mysql(根据原始问题)
      • @DanielLee 是的。另外值得注意的是,最新的 FluentMigrator 的 Rename.Column 方法将在 MSSQL 上使用 sp_rename
      猜你喜欢
      • 2011-02-11
      • 1970-01-01
      • 2023-03-20
      • 2017-09-21
      • 2016-10-01
      • 2011-09-09
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多