2016-12-03 2 views
0

Ich habe ein MVC-Projekt, das EF-Code zuerst verwendet, und ich versuche, in Visual Studio in Azure zu veröffentlichen, aber ich erhalte den Fehler: "Webbereitstellungstask ist fehlgeschlagen: Datenverlust könnte auftreten ". Ich habe ein paar Refactoring-Funktionen durchgeführt, einschließlich der Umbenennung von Spalten, und mir ist bewusst, warum der Fehler auftritt, aber ich möchte die Migration erzwingen, da ich sicher bin, dass ich den Datenverlust behandelt habe :-) Nichtsdestotrotz habe ich keine Ahnung, wie man die Datenverlustprüfung überspringt. Ich habe festgestellt, dass in SQL-Projekt haben Sie eine Option in Eigenschaften, die Sie deaktivieren können, "blockieren potenzielle Daten lose", aber ich kann so etwas in meinem MVC-Projekt nicht finden. Ich habe versucht, mein eigenes Skript für das Schema-Update ohne die Prüfungen für Datenverlust einzuschließen, aber EF beklagt, dass es ausstehende Migrationen gibt, also habe ich versucht, fehlende Einträge in _MigrationHistory-Tabelle aus meiner Entwicklungsdatenbank zu kopieren, aber es stellte sich heraus, dass es nicht ist so einfach ;-) Da meine App noch in der Entwicklungsphase ist, habe ich db reinitialisiert aber es wird es wert sein zu wissen, wie man mit dieser Art von Situation auf "echten" Produktionsumgebungen umgehen kann :-)Webbereitstellungstask fehlgeschlagen: Datenverlust bei der Bereitstellung von Azure

Edit: Nach ein paar Tests Ich habe entdeckt, dass bei der Veröffentlichung in Azure jetzt die Option "update database" verfügbar ist, die standardmäßig db update script basierend auf diff auf der lokalen und azure db erzeugt. Es unterscheidet sich von der alten "Run Code First migration", weil die alte den Db initializer in MigrateDatabaseToLatestVersion änderte und beim Start der Anwendung wurde die db migriert & seed wurde ausgeführt, wenn keine Migrationen durchgeführt wurden. Der Prozess "update database" wird dagegen nur von generiertem Skript verarbeitet, und die Migrationsdateien und die Tabelle "MigrationsHistory" werden bei der Produktion weder für die Seed-Methode verwendet. Ich war am Anfang verwirrt, aber jetzt scheint es logisch, dass Update-Skript mehr Kontrolle über die Datenbankänderung gibt, Sie können das Skript immer ändern, und außerdem führt der Veröffentlichungsprozess des Verschiebens von neuem Code nach azure nur nach erfolgreicher db-Aktualisierung durch.

Antwort

1

Dies ist eine Option namens AutomaticMigrationDataLossAllowed, die auf "true" gesetzt ist. Und führe Update-Datenbank -Force aus. Das sollte es tun.

+0

Ich habe versucht, die 'AutomaticMigrationDataLossAllowed', aber ich war Verlass auf 'MigrateDatabaseToLatestVersion' Initialisierer, der diese Flagge nicht berücksichtigt (in meinen Tests). Stellen Sie sich vor, dass die Migration von der Paketmanagerkonsole mit -Force den gewünschten Erfolg bringt. Ich habe jetzt nichts zu testen und ich habe das Update-Szenario bereits auf "update database" geändert (mehr Infos in Bearbeitung), aber ich denke, dass diese Antwort akzeptiert werden kann :-) – eldi

Verwandte Themen