2012-10-27 15 views

Odpowiedz

88

ręcznie edytować górę iw dół metod migracji użyć metody RenameColumn zastąpić AddColumn i DropColumn że automatycznie generuje dla Ciebie.

+7

Uważaj na nazwy tabel zawierające kropki. 'RenameColumn' generuje instrukcję T-SQL' sp_rename', która używa wewnętrznie 'pseudonimu', który ma pewne ograniczenia. Więc jeśli masz nazwę tabeli z kropkami, np. "SubSystemA.Tablename", a następnie użyj: 'RenameColumn (" dbo. [SubSystemA.Tablename] "," OldColumnName "," NewColumnName ");' – Ilan

4

Teraz ta odpowiedź jest oparta na mojej znajomości EF4.3, więc mam nadzieję, że migracje będą działać mniej więcej tak samo w EF5 :) Po utworzeniu migracji powinieneś być w stanie dodać kod w Up i Metody opuszczania, między upuszczeniem starej własności a utworzeniem nowej własności. Ten kod powinien przenieść dane właściwości we właściwym kierunku. Rozwiązałem go za pomocą metody SQL(), w której można wprowadzić surowy SQL, aby przenieść dane.

W metodzie Up migracji:

SQL("update [TheTable] set [NewColumn] = [OldColumn]"); 

aw() metoda Down:

SQL("update [TheTable] set [OldColumn] = [NewColumn]"); 

Wadą tego podejścia jest to, że może para kodu z bazy danych w tej chwili pracuję (od pisania surowego SQL-a). Możliwe są również inne metody przenoszenia danych.

Więcej informacji tutaj: MSDN

2

Dodawanie do Josha Gallaghera odpowiedź:

w niektórych miejscach składnia procedury sp_rename jest opisane tak:

sp_RENAME 'TableName.[OldColumnName]' , '[NewColumnName]', 'COLUMN' 

jednak, że będzie to rzeczywiście wsporniki nową nazwę kolumny.

Metoda RenameColumn() DbMigration prawdopodobnie zrobi to samo, dlatego należy unikać nawiasów przy określaniu nowej nazwy kolumny.

Ponadto, polecenia generowane automatycznie w Up() & Down() to DropPrimaryKey() i AddPrimaryKey(), jeśli zmieniona nazwa kolumny jest częścią klucza podstawowego. Nie są one potrzebne podczas używania RenameColumn(). Odpowiednia sp_RENAME w razie potrzeby automatycznie aktualizuje klucz podstawowy.

0

jak + Josh Gallagher powiedział, można użyć w górę(), aby robić takie rzeczy jak:

public override void Up() 
     { 

      RenameColumn("dbo.atable","odlanem","newname"); 
      AddColumn("dbo.anothertable", "columname", c => c.String(maxLength: 250)); 

     } 

Znalazłem this dobra pomoc w gettin do migracji;)

23

As already said, wymienić AddColumn i DropColumn, który jest automatycznie generowany z RenameColumn.

Przykład:

namespace MyProject.Model.Migrations 
{ 
    using System; 
    using System.Data.Entity.Migrations; 

    public partial class RenameMyColumn : DbMigration 
    { 
     public override void Up() 
     { 
      // Remove the following auto-generated lines 
      AddColumn("dbo.MyTable", "NewColumn", c => c.String(nullable: false, maxLength: 50)); 
      DropColumn("dbo.MyTable", "OldColumn"); 

      // Add this line 
      RenameColumn("dbo.MyTable", "OldColumn", "NewColumn"); 
     } 

     public override void Down() 
     { 
      // Remove the following auto-generated lines 
      AddColumn("dbo.MyTable", "OldColumn", c => c.String(nullable: false, maxLength: 50)); 
      DropColumn("dbo.MyTable", "NewColumn"); 

      // Add this line 
      RenameColumn("dbo.MyTable", "NewColumn", "OldColumn"); 
     } 
    } 
} 
2

Ty może się migracja zadzwonić RenameColumn dla Ciebie, jeśli to zrobić:

[Column("NewName")] 
public string OldName { get; set; } 

Oto generowane migracja:

public override void Up() 
    { 
     RenameColumn(table: "Schema.MyTable", name: "OldName", newName: "NewName"); 
    } 

    public override void Down() 
    { 
     RenameColumn(table: "Schema.MyTable", name: "NewName", newName: "OldName"); 
    } 

Jeśli chcesz, aby twoja własność i kolumna DB były takie same na mnie, możesz zmienić nazwę nieruchomości później i usunąć atrybut Column.

+0

I po prostu rzucić kolejną przydatną wskazówkę, możesz również uruchomić to w Menedżerze pakietów Konsola: 'Update-Database -Script'. Następnie możesz uzyskać polecenie SQL 'sp_rename', aby uruchomić w swoim wolnym czasie. :RE – Jess

1

masz 2 kroki, aby zmienić nazwę kolumny w kodzie pierwszej migracji

  1. Pierwszy krok należy dodać ColumnAttribute powyżej kolumnie, które zostaną zmienione, a następnie zaktualizować-Database polecenia

[ Column ("Content")]
public string Opis {zestaw; otrzymać; }

  1. drugim etapie

    • dodatek migracji polecenia yournamechange w celu wytworzenia częściowej klasy DbMigration.

    • dodać do góry i na dół metody tutaj

RenameColumn ("yourDatabase", "nazwa", "newName");

public override void Up() 
    { 
     RenameColumn("dbo.your_database", "oldColumn",   
     "newColumn"); 
    } 


public override void Down() 
    { 
     RenameColumn("dbo.your_database", "newColumn", 
     "oldColumn"); 
    } 

Bo po podłączeniu, klasa bazy danych i model będzie komunikować się za pomocą name_column w bazie danych i name_type w metodzie nieruchomości w modelu powyżej.

Powiązane problemy