2013-11-27 6 views
5

Мне нужно переименовать первичный ключ существующей таблицы через fluent-migrator, чтобы automapper мог автоматически обнаружить столбец.Как мы можем переименовать первичный ключ таблицы в свободно-мигрирующем?

Для большинства столбцов это просто 1) удалите любые ограничения внешнего ключа в этом столбце 2) индексы удаления для этого столбца и 3) переименуйте столбец. Я исторически сделал это по:

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

Однако, это не кажется, работает для первичных ключей, так как я не могу удалить автоматически созданный индекс для этого столбца. Каков правильный способ переименования столбца первичного ключа с помощью fluent-migrator?

ответ

2

Что-то, как это должно работать, пока он не является тождество (автоматическое приращение) колонки, а также:

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

С момента написания это приведет к сбою в базе данных Azure, если первичный ключ является единственным кластеризованным индексом в таблице. На этом этапе я еще не нашел обходного пути и просто оставил имя первичного ключа неизменным. Однако это может быть не решение вопроса. – Manfred

+0

Одним из преимуществ [labilbe] (http://stackoverflow.com/users/1195872/labilbe) 's [answer] (http://stackoverflow.com/a/24406280/1488979) является 'sp_rename' будет обрабатываться это для вас. См. [MSDN] (https://msdn.microsoft.com/en-us/library/ms188351.aspx). –

+0

@MichaelMinton Не будет работать для mysql, хотя (согласно оригинальному вопросу) –

4

Используйте метод следующего вызова переименовать первичный ключ (SQL Server)

Execute.Sql("EXEC sp_rename N'[Current_Primary_Key_Name]', '[New_Primary_Key_Name]', 'object';"); 
Смежные вопросы