2013-11-27 12 views
5

Devo rinominare la chiave primaria di una tabella esistente tramite fluent-migrator in modo che un automapper possa rilevare automaticamente la colonna.Come possiamo rinominare la chiave primaria di una tabella in fluent-migrator?

Per la maggior parte delle colonne, si tratta di un semplice 1) eliminare i vincoli di chiave esterna su quella colonna 2) indici di eliminazione per quella colonna e 3) rinominare la colonna. Ho storicamente fatto questo:

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

Tuttavia, questo non sembra funzionare per le chiavi primarie, dal momento che non è possibile eliminare l'indice creato automaticamente su quella colonna. Qual è il modo corretto per rinominare una colonna chiave primaria con fluent-migrator?

risposta

2

Qualcosa del genere dovrebbe funzionare fino a quando non è un'identità (incremento automatico) Colonna così:

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

Al momento della scrittura, questo non funzionerà nel database di Azure, se la chiave primaria è l'unico indice cluster sulla tabella. Non ho ancora trovato una soluzione alternativa in questa fase e ho lasciato invariato il nome della chiave primaria. Questa potrebbe non essere una soluzione per la domanda, però. – Manfred

+0

Uno dei vantaggi della [labilbe] (http://stackoverflow.com/users/1195872/labilbe) 's [risposta] (http://stackoverflow.com/a/24406280/1488979) è che 'sp_rename' gestirà quello per te. Vedere [MSDN] (https://msdn.microsoft.com/en-us/library/ms188351.aspx). –

+0

@MichaelMinton Non funzionerà per mysql (come da domanda originale) –

4

Utilizzare il metodo seguente chiamata per rinominare la chiave primaria (SQL Server)

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