In meinen MVC-Web-Apps habe ich ein Modell namens Competencies zu den vorhandenen Modellen hinzugefügt und habe die Migration und Update-Datenbank hinzugefügt, es funktioniert gut und dann habe ich einen Controller basierend auf diesem Modell erstellt, es ist OK,
Aber nachdem ich festgestellt habe, dass etwas nicht in Ordnung ist, löschte ich den Controller und seine Ansichten mit dem Modell, lösche auch die Tabelle von Server Exploder und erstellte ein neues Modell namens CompetencyLabel, und führe add-migration aus, es funktioniert gut, aber wenn ich update-database ausführen, habe ich diesen Fehler in PM & gt; Fenster.
"Das Objekt" dbo.Competencies "kann nicht gefunden werden, weil es nicht existiert oder Sie keine Berechtigungen haben.",
diese Tabelle wurde gelöscht, ich weiß nicht, warum es mich immer noch fragt, weiß jemand, wie es funktioniert? vielen Dank,
Wenn Sie den Befehl Enable-Migrations
eingeben, wird ein Ordner Migrations
im Projekt erstellt. Immer wenn Sie Add-Migration
angeben, wird in diesem Ordner eine neue Migrationsdatei erstellt. In der Datei sind zwei Methoden definiert:
Up()
- definiert die Aktionen, die ausgeführt werden sollen, wenn wir die Datenbank mit Update-Database
aktualisieren
Down()
- Definiert Aktionen, die ausgeführt werden sollen, wenn wir die Datenbank mit Update-Database
herabstufen.
Nachdem Sie das Kompetenzmodell gelöscht haben, hat die neueste Migration Code zur Methode Up()
hinzugefügt, die Indizes für die Tabelle "Kompetenzen" zerstört und die Tabelle verwirft. Wie Sie es manuell getan haben, entfernen Sie einfach den dafür verantwortlichen Code und Update-Database
. Es sollte es ohne Probleme aktualisieren.
Wenn Sie diesen Fehler erhalten, versuchen Sie, Ihre Up()
-Anweisungen in der richtigen Reihenfolge anzuordnen. Beispielsweise,
Wenn Sie sich das Bild oben ansehen, erkennen Sie, dass die Tabelle Users
am Anfang umbenannt wird und in der nächsten Zeile eine SQL-Anweisung generiert wird, um einen Fremdschlüssel in der Tabelle Users
, aber in Entity zu löschen Framework, diese Tabelle (das ist die Users
-Tabelle) existiert nicht mehr, so wird es einen Fehler werfen.
Ordnen Sie die Anweisungen neu an, damit die Tabelle Users
nicht umbenannt wird. Ein Beispiel ist in dem Bild unten zu sehen.
Ich habe eine andere Antwort für dieses Problem gefunden.
Mein Szenario war, dass ich Änderungen an meinen Entitäten vorgenommen habe (Ändern von Relationen und Angeben von Namen). Als ich die update-database -verbose ausführte, stellte ich fest, dass einige Funktionen mit "EntityHistory" ausgeführt wurden, aber diese Entität existierte nicht mehr, weil ich den Namen in "AnotherEntityHistory" geändert habe. Als Ergebnis bekomme ich dann das " Kann das Objekt nicht finden" dbo.EntityHistory ", weil es nicht existiert oder Sie keine Berechtigungen haben ".
Was ich getan habe, war, die AnotherEntityHistory wieder in EntityHistory umzubenennen, die Update-Datenbank auszuführen (alles wird in Ordnung sein, weil es nun die fehlende Entity EntityHistory hat), die EntityHistory in AnotherEntityHistory umbenennen und die Update-Datenbank erneut ausführen / p>
Sie werden sehen, dass es jetzt nur die Tabelle umbenennen muss, anstatt Tabellen umzubenennen, Indizes zu löschen, etc ....
Auf diese Weise müssen Sie keine Tabelle oder die Migrationswerte entfernen.
Da Sie den Inhalt der Datenbank manuell gelöscht haben, nachdem Sie Add-Migration
angewendet haben, und bevor Sie Update-Database
ausführen ( Ich schätze, Fehler wird hier erzeugt )
Update-Database –TargetMigration: OldMigration
zurücksetzen oder die generierte Datenbank löschen oder den alten Migrationsdatensatz aus der Datenbanktabelle löschen Add-Migration
von der ersten Migration des NPM-Codes an Add-Migration
command Dies löst Ihr Problem.
Entfernen Sie alle Migrationsklassen, die Sie manuell im Migrationsordner hinzugefügt haben (durch den Befehl "add-migration"), und geben Sie den folgenden Befehl ein: add-migration MigrationName -ProjectName YourProjectName
Wenn alles gut funktioniert, sollten Sie den folgenden Code in der Up-Methode der neu erstellten Migrationsklasse sehen
DropTable("dbo.Competencies");
CreateTable("dbo.CompetencyLabel");
Führen Sie dann diesen Befehl update-database -verbose -ProjectName YourProjectName
fröhliche Codierung
Tags und Links asp.net-mvc