EF5 Code First - Ändern eines Spaltentyps mit Migrationen

29

Ich bin neu in EF5 Code First und ich bastle mit einem Proof-of-Concept, bevor ich ein Projekt bei der Arbeit beginne.

Ich habe ursprünglich ein Modell erstellt, das ungefähr wie

aussieht %Vor%

Und ich fügte ein paar Datensätze mit einer kleinen MVC-Anwendung, die ich oben steckte.

Nun möchte ich die Location-Spalte in eine Enum ändern, etwa wie folgt:

%Vor%

Wenn ich die neue Migration hinzufüge, bekomme ich:

%Vor%

aber wenn ich update-database ausführe bekomme ich einen Fehler

%Vor%

Gibt es in der Migration eine Möglichkeit, die Tabelle zu kürzen, bevor die alter-Anweisung ausgeführt wird?

Ich weiß, ich kann die Datenbank öffnen und manuell tun, aber gibt es einen klügeren Weg?

    
Nick 12.02.2013, 16:28
quelle

2 Antworten

45

Der schlaueste Weg ist wahrscheinlich, Typen nicht zu ändern. Wenn Sie dies tun müssen, empfehle ich Ihnen, die folgenden Schritte auszuführen:

  1. Fügen Sie eine neue Spalte mit Ihrem neuen Typ
  2. hinzu
  3. Verwenden Sie Sql() , um die Daten aus der ursprünglichen Spalte mit einer update-Anweisung
  4. zu übernehmen
  5. Entfernen Sie die alte Spalte
  6. Benennen Sie die neue Spalte um

Dies kann alles in derselben Migration erfolgen, das korrekte SQL-Skript wird erstellt. Sie können Schritt 2 überspringen, wenn Sie möchten, dass Ihre Daten verworfen werden. Wenn Sie es übernehmen möchten, fügen Sie die entsprechende Anweisung hinzu (kann auch eine switch-Anweisung enthalten).

Leider bieten Code First Migrations keine einfacheren Möglichkeiten, dies zu erreichen.

Hier ist der Beispielcode:

%Vor%     
JustAnotherUserYouMayKnow 12.02.2013, 16:39
quelle
12

Basierend auf @ JustAnotherUserYouMayKnow's Antwort, aber einfacher.

Probieren Sie zuerst Sql() command und dann AlterColumn() :

aus %Vor%     
Seven 18.04.2015 18:02
quelle