Grundsätzlich habe ich eine Tabelle in meiner EF-Datenbank mit den folgenden Eigenschaften:
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string WatchUrl { get; set; }
public int Year { get; set; }
public string Source { get; set; }
public int Duration { get; set; }
public int Rating { get; set; }
public virtual ICollection<Category> Categories { get; set; }
Es funktioniert einwandfrei, aber wenn ich das int von Rating in ein Double ändere, wird beim Aktualisieren der Datenbank der folgende Fehler angezeigt:
Das Objekt 'DF_ Movies _Rating__48CFD27E' ist abhängig von der Spalte 'Rating'. ALTER TABLE ALTER COLUMN Die Bewertung ist fehlgeschlagen, da ein oder mehrere Objekte auf diese Spalte zugreifen.
Was ist das Problem?
sql
sql-server
database
entity-framework
entity-framework-4
Jordan Axe
quelle
quelle
Antworten:
Versuche dies:
Entfernen Sie die Einschränkung DF_Movies_Rating__48CFD27E, bevor Sie Ihren Feldtyp ändern.
Die Einschränkung wird normalerweise automatisch vom DBMS (SQL Server) erstellt.
Um die mit der Tabelle verknüpfte Einschränkung anzuzeigen, erweitern Sie die Tabellenattribute im Objekt-Explorer , gefolgt von der Kategorie Einschränkungen, wie unten gezeigt:
Sie müssen die Einschränkung entfernen, bevor Sie den Feldtyp ändern.
quelle
update-database
sie erneut aufrufe, habeDas ist der
tsql
WegDer Vollständigkeit halber zeigt dies nur den Kommentar von @Joe Taras als Antwort
quelle
Ich füge dies als Antwort hinzu, um zu erklären, woher die Einschränkung kommt. Ich habe versucht, es in den Kommentaren zu tun, aber es ist schwer, es dort gut zu bearbeiten: - /
Wenn Sie eine Tabelle mit einer Spalte mit Standardwerten erstellen (oder ändern), wird die Einschränkung für Sie erstellt.
In Ihrer Tabelle könnte es zum Beispiel sein:
Dadurch wird die Einschränkung für Standard 100 erstellt.
Wenn Sie es stattdessen so erstellen
Dann erhalten Sie eine gut benannte Einschränkung, auf die Sie beim Ändern dieser Tabelle leichter verweisen können.
Sie können diese letzten beiden Anweisungen kombinieren, um die Spalte zu ändern und die Einschränkung in einer Zeile zu benennen (Sie müssen dies tun, wenn es sich sowieso um eine vorhandene Tabelle handelt).
quelle
Da die Einschränkung einen unvorhersehbaren Namen hat, können Sie ein spezielles Skript ( DropConstraint ) schreiben , um sie zu entfernen, ohne den Namen zu kennen (wurde in EF 6.1.3 getestet):
quelle
MS SQL Studio kümmert sich darum, wann Sie die Spalte löschen. Wenn Sie jedoch die Einschränkung programmgesteuert löschen müssen, finden Sie hier eine einfache Lösung
Hier ist ein Code-Snippet, mit dem eine Spalte mit einer Standardeinschränkung gelöscht wird:
Ersetzen Sie einfach TableName und ColumnName durch die entsprechenden Werte. Sie können dies sicher ausführen, auch wenn die Spalte bereits gelöscht wurde.
Bonus : Hier ist der Code zum Löschen von Fremdschlüsseln und anderen Arten von Einschränkungen.
Blog
quelle
Wenn wir versuchen, eine Spalte zu löschen, von der abhängig ist, sehen wir diese Art von Fehler:
Löschen Sie die von dieser Spalte abhängige Einschränkung mit:
Beispiel:
Drop Constraint (DF__Employees__Colf__1273C1CD):
Dann können Sie die Spalte löschen:
quelle
Lösung:
Öffnen Sie die Datenbanktabelle -> erweitern Sie die Tabelle -> erweitern Sie die Einschränkungen und sehen Sie dies
quelle
Ich hatte diesen Fehler beim Versuch, eine Migration auszuführen, um sie zu umgehen. Ich habe die Spalte umbenannt und die Migration mit neu generiert
in der Paketmanager-Konsole. Ich konnte dann rennen
erfolgreich.
quelle