Ich benutze den EF-Code-First-Ansatz und möchte das Id
-Feld in guid
ändern, aber es scheint nicht möglich, unter den Fehler zu kommen.
Dies ist meine erste Migration:
%Vor% Später wurde mir klar, dass ich meine Spalte Id
als GUID verwenden muss, also habe ich meine Modelldatei geändert:
Wenn Add-Migration ChangeDownloadTokenIdToGuid
ausgeführt wird, wird diese Datei generiert:
Das Ausführen dieser Datei mit Update-Database
verursacht diesen Fehler:
Irgendwelche Ideen, warum das passieren könnte?
Es wurde verursacht, weil es unmöglich ist, den vorherigen int
-Typ der Id
-Spalte in Guid
-Typ umzuwandeln (genau diesen Versuch, AlterColumn
-Methode auszuführen). Außerdem wird Ihnen durch die Fehlermeldung angezeigt, dass der neue Typ der Id
-Spalte für den Typ aus dem Satz: int, bigint, smallint, tinyint oder dezimal oder numerisch mit einer Skalierung von 0 sein kann Es ist möglich, die Konvertierung von int
type durchzuführen.
Lösung - fügen Sie einfach die Spalte Id
ein und erstellen Sie sie dann mit dem neuen Guid
-Typ neu. Ändern Sie die Migration auf diese Weise:
P.S. Warum verwenden Sie das
DatabaseGeneratedOption.Computed
-Attribut nicht?DatabaseGeneratedOption.Identity
?
Obwohl Slava Utesinov funktioniert, funktioniert es nur bei leeren Tabellen oder in Fällen, in denen keine anderen Tabellen auf die Tabelle verweisen, die Sie konvertieren. Diese Antwort hilft also denjenigen, die auf dieser Seite landen, mit einer komplexeren Datenbankeinrichtung.
Im Folgenden finden Sie eine Dienstprogrammfunktion, die Sie in Ihrer Migrationsklasse verwenden können. Diese Funktion sollte über die Funktionen Hoch / Runter aufgerufen werden. Die Funktion behandelt auch Tabellen, die auf die Tabelle verweisen, die Sie von Int in Guid konvertieren möchten. Diese Hilfsfunktion geht davon aus, dass die zu konvertierende Spalte "Id" heißt, sollte aber ansonsten eher generisch sein.
%Vor%In Ihrem Fall wären also Ihre Up / Down-Funktionen:
%Vor%Tags und Links c# entity-framework asp.net ef-migrations