Ich füge eine neue Migration hinzu, aber diese Meldung zeigt:
Eine explizite Migration kann nicht generiert werden, da die folgenden expliziten Migrationen ausstehen: [201203170856167_left]. Wenden Sie die ausstehenden expliziten Migrationen an, bevor Sie versuchen, eine neue explizite Migration zu generieren.
Kann mir jemand helfen?
entity-framework
ef-migrations
Noman Saeed
quelle
quelle
Antworten:
Es zeigt Ihnen, dass Ihre Anwendung eine unverarbeitete Migration enthält und ausgeführt werden muss,
Update-Database
bevor Sie eine weitere Migration hinzufügen können.quelle
-StartupProject ContentHub.Database
Update-Database
gibt> Datenbank kann nicht aktualisiert werden, um mit dem aktuellen ModellIch hatte das gleiche Problem. Anscheinend generiert das Entity Framework diesen Fehler, wenn keine Verbindung zur Datenbank hergestellt werden kann. Stellen Sie also sicher, dass Sie darauf zugreifen können, bevor Sie nach anderen Problemen suchen.
quelle
Sie müssen entweder "update-database" über die Paketmanagerkonsole ausführen, um Ihre Änderungen in die Datenbank zu übertragen, oder Sie können die ausstehende Migrationsdatei ([201203170856167_left]) aus Ihrem Migrationsordner löschen und dann "add-migration" erneut ausführen Erstellen Sie eine brandneue Migration basierend auf Ihren Änderungen.
quelle
Dieser Fehler kann auch dazu führen, dass die Migrationen nicht mehr erkannt werden. Dies ist mir passiert, nachdem ich den Wert des ContextKey in Migrations.Configuration geändert habe. Die Lösung bestand einfach darin, den ContextKey in der Datenbanktabelle "__MigrationHistory" zu aktualisieren (oder den Wert in der Konfigurationsklasse zurückzusetzen, denke ich). Der ContextKey und der Namespace in Ihrer Anwendung sollten übereinstimmen.
quelle
1. Verbindungszeichenfolge / Verbindungsberechtigungen
Überprüfen Sie die Verbindungszeichenfolge erneut.
Stellen Sie sicher, dass der Benutzer, mit dem Sie eine Verbindung herstellen, weiterhin über die Berechtigung zum Lesen
[__MigrationHistory]
und zum Bearbeiten des Schemas verfügt.Sie können auch versuchen, die Verbindungszeichenfolge in der App- oder Webkonfigurationsdatei so zu ändern, dass Integrated Security (Windows Auth) verwendet wird, um den Befehl add-migration als Sie selbst auszuführen .
Beispielsweise:
Diese Verbindungszeichenfolge wird in die Datei App.config des Projekts aufgenommen, in dem sich der DbContext befindet.
2. StartUp-Projekt
Sie können die StartUp - Projekt auf der Befehlszeile angeben , oder Sie können das Projekt mit der rechten Maustaste
DbContext
,Configuration
und Migrations - Ordner und wählen Sie Als Startprojekt festlegen . Ich meine es ernst, das kann tatsächlich helfen.quelle
Integrated Security
Update funktioniert super!Hatte das gleiche Problem und konnte mit einigen Hinweisen aus den obigen Antworten lösen:
Verwenden Sie "update-database -verbose" in der Paketmanagerkonsole, um genauere Informationen zu erhalten, zu denen Migrationen eine Verbindung herstellen möchten. (Hat in meinem Fall geholfen herauszufinden, dass mein Startprojekt nicht richtig eingestellt war ...)
quelle
Wenn Sie nicht verwendet haben, können
Update-Database
Sie es einfach löschen. Wenn Sie das Update ausgeführt haben, rollen Sie es mit zurückUpdate-Database -TargetMigration "NameOfPreviousMigration"
und löschen Sie es.Referenz: http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/
Ich habe diesen Text direkt von hier kopiert: Wie mache ich den letzten Add-Migration-Befehl rückgängig?
quelle
Wenn Sie auf dieses Problem stoßen, versuchen Sie bitte, Ihrem Cmdlet "Add-Migration" Parameter hinzuzufügen. Wenn Sie beispielsweise das Startprojekt sowie den Namen der Verbindungszeichenfolge angeben, kann EF Ihre Zieldatenbank leichter finden.
Wo:
Delta_Defect_0973 ist der Name Ihrer Migration
your.namespace.ContextClassName ist der Name Ihrer Konfigurationsklasse in Ihrem Migrationsordner, dem der vollständige Namensraum vorangestellt ist.
DeltaProject ist der Name Ihres Hauptprojekts mit Ihrer Datei web.config oder app.config.
DeltaSQL ist der Name Ihrer Verbindungszeichenfolge, die in Ihrer Datei web.config oder app.config definiert ist.
quelle
Dieser Fehler bedeutet, dass ausstehende Migrationen festgeschrieben werden müssen, bevor Sie eine weitere explizite Migration ausführen können. Sie können wählen
Danach können Sie "Add-Migration ..." erneut starten
Ich hoffe es hilft
quelle
Nur meine zwei Cent:
Mein Szenario:
Lösung:
Um dies zu umgehen, habe ich nur explizitere Parameter angegeben:
Ich bin der Überzeugung, dass Sie in Ihrem Ordner app.config eine Einstellung festlegen können, mit der Sie dieses Verhalten als Standard festlegen können, sodass Sie nicht jedes Mal explizite Parameter angeben müssen. Ich bin mir jedoch nicht sicher, wie ich das machen soll.
quelle
-ConnectionStringName
ist eine Alternative dazu und zieht die Verbindungszeichenfolge aus Ihrer Konfiguration nach NamenEs gibt eine Mehrdeutigkeit und damit einen Fehler. Am besten schließen Sie die aktuelle Migrationsdatei aus und erstellen eine neue Migrationsdatei ( Add-Migration ). Kopieren Sie dann den Inhalt der neuen Migration in die ausgeschlossene Datei, fügen Sie ihn erneut ein und führen Sie den Befehl update-database aus .
quelle
update-database
Befehl ausgeführt und dann meinenadd-migration
Befehl wiederholt und es hat funktioniertIch habe das gleiche Problem wie folgt gelöst:
quelle
Ich hatte die gleichen Probleme und konnte sie nur mit Add-Migration 'MigrationName' -Force beheben
Mit -Force ist der wichtige Teil.
quelle
In meiner lokalen Datenbank war die nicht
__MigrationHistory
ausgefüllt oder vorhanden. Ich habe die Tabelle manuell erstellt und dann die Daten in dieser Tabelle von PROD in meine lokale Datenbank migriert. Dies führte dazu, dass VS glaubte, die Migrationen seien angewendet worden (was sie waren).quelle
Tipp:
-Script
Wenn Sie sich nicht sicher sind, können Sie den Schalter immer für Migrationsbefehle verwenden. Es hilft auch wirklich zu verstehen, wasUpdate-Database
tatsächlich tut.Ich führe Folgendes aus, um die Datenbank zu aktualisieren, und erhalte dann ein Skript, das ich manuell anwenden kann (oder es einfach ohne das -Script-Tag erneut ausführen kann).
Denn
Update-Database
ich würde folgendes ausführen:Update-Database -Script -ConfigurationTypeName Configuration_ASPNETIdentity -ConnectionStringName SQL_AzureLive
Wo
SQL_AzureLive
ist die benannte Verbindungszeichenfolge in meiner Konfiguration?Dann kann ich überprüfen, ob SQL richtig aussieht, es anwenden und fertig sein. Wie viele andere gesagt haben, wird diese Fehlermeldung angezeigt, wenn die Verbindungszeichenfolge falsch oder ungültig ist.
quelle
Für mich habe ich die Migrationsdatei (in Ihrem Fall "201203170856167_left") aus dem
Migrations
Ordner gelöscht und dann den folgenden Befehl in der Package Manager-Konsole ausgeführtquelle
Szenario
Problem
Nach dem Update vom Master führe ich "Add-Migration my_migration_name" aus, erhalte aber den folgenden Fehler:
Also starte ich "Update-Database" und erhalte folgenden Fehler:
Lösung
Zu diesem Zeitpunkt löste das erneute Ausführen von "Add-Migration my_migration_name" mein Problem. Meine Theorie ist, dass das Ausführen von "Update-Database" alles in dem Zustand hat, in dem es sein muss, damit "Add-Migration" funktioniert.
quelle
Ich bin auch auf dieses Problem gestoßen. Es kam, als ich eine neue Datenbank erstellte und ausstehende Änderungen für meine Code-First-DB-Migration hatten. Dann habe ich versucht, den Befehl "Update-Database" auszuführen. Lösung: Führen Sie den Befehl "Add-Migration -MigrationName" aus, um eine neue Migration für eine neue Datenbank zu erstellen. Führen Sie dann den Befehl "Update-Database" aus.
quelle
Ich hatte dieses Problem auch für eine Datenbank, von der ich wusste, dass sie beim Ausführen von Add-Migration auf dem neuesten Stand war. Gelöst durch einfaches zweites Ausführen des Befehls Add-Migration. Verdacht auf ein Konnektivitätsproblem, wie oben von Robin Dorbell vorgeschlagen.
quelle
Das geschah, als ich plötzlich die Klasse der alten Migration umbenannte, die bereits in db existiert. Ich habe den VCS-Verlauf überprüft, festgestellt und wieder umbenannt. Alle arbeiteten danach.
quelle
Ich habe es anders gemacht. Ich habe die Datenbank komplett gelöscht und "update-database" erneut in vs.
quelle
Ich hatte ein einfacheres Problem. VS hat diesen Fehler fälschlicherweise gemeldet, als ich eine VPN-Verbindung zu einem Clientstandort hatte, der auf meiner Workstation verbunden war. Das Problem war, dass die DBMS-Sicherheit so eingestellt war, dass Anforderungen nur von meiner realen lokalen IP akzeptiert wurden. Durch einfaches Ausschalten des VPN wurde das Problem behoben.
quelle
In meinem Fall habe ich vergessen, meine IP-Adresse in Azure in Firewall-Regeln einzufügen. Da ich keine Verbindung zur Datenbank herstellen konnte, wurde dieser Fehler angezeigt. Speziell für meinen Fall habe ich meine IP-Adresse in die Regeln der Datenbank-Firewall in Azure eingefügt, und alles hat gut funktioniert. Abgesehen davon kann es sich um ein Problem mit Proxy / Internetverbindung / DB-Benutzername, Kennwort / DB-Verbindungszeichenfolge usw. handeln. ODER es können offensichtlich ausstehende Migrationen vorliegen, für die Sie den Befehl Update-Database ausführen müssen.
quelle
In der Vergangenheit habe ich dies immer gelöst, indem ich die ausstehenden Migrationen gelöscht habe oder wenn nur noch 1 übrig war und es meistens wünschenswert war, sie
-f
neu zu erstellen.Vor kurzem hat dies für mich aufgehört zu arbeiten.
Als dies das erste Mal geschah, habe ich Visual Studio neu gestartet und dann konnte ich fortfahren.
Das zweite Mal hat es erst funktioniert, nachdem ich ein Clean für das Projekt ausgeführt habe. Es war fast so, als würden die ausstehenden Migrationen beibehalten, obwohl alle Dateien aus dem Explorer gelöscht wurden.
quelle
Dies wird für viele Menschen nicht die Antwort sein, aber EF wird diesen Fehler beheben, wenn keine Verbindung zur Datenbank hergestellt werden kann. Wenn Sie wie ich von zu Hause aus arbeiten, stellen Sie sicher, dass Sie immer noch mit Ihrem VPN verbunden sind!
quelle
Ich hatte genau das gleiche Problem, kurz nachdem ich von einer Migration zu einer anderen zurückgekehrt war.
In meinem Fall habe ich "gezielte Migration" von "Migration06" nach "Migration04".
Ich musste die "Migration0" 6 löschen und konnte dann die Erstellung der "Migration05" erzwingen. Dies bedeutet im Grunde, dass Sie nur die nächste Migration nach der Zielmigration beibehalten müssen.
quelle
In meinem Fall (mit MS Visual Studio) war es so einfach wie ein Neustart von Visual Studio.
quelle