Hinzufügen 'GEHEN' Aussagen zu Entity Framework-Migrationen
So, ich habe eine Anwendung mit einer Tonne von Migrationen aus, die von Entity framework.
Wir wollen ein Skript für alle Migrationen auf einmal und mit der -Script
tag funktioniert gut.
Aber...es geht nicht hinzufügen GO
- Anweisungen in der SQL-was uns Probleme wie Alter view should be the first statement in a batch file...
Ich habe die Suche rund um und manuell hinzufügen Sql("GO");
mit diesem problem helfen, aber nur für das gesamte Skript. Wenn ich den Paket-manager-Konsole wieder gibt es eine Ausnahme.
System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'GO'.
Gibt es eine Möglichkeit, diese GO
tags nur bei der Verwendung der -Script
tag?
Wenn nicht, was ist ein guter Ansatz dafür?
Hinweis: wir haben auch versucht, mit mehreren Dateien, aber da wir so viele Migrationen, das ist in der Nähe nicht mehr zu halten zu jeder Zeit.
InformationsquelleAutor Tikkes | 2013-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Damit ändern Sie die Generierte SQL von entity framework-Migrationen können Sie erstellen eine neue
SqlServerMigrationSqlGenerator
Wir haben dies zum hinzufügen einer GO-Anweisung vor und nach der migration-Geschichte:
dann fügen Sie in die
Configuration
Konstruktor (in derMigrations
Ordner des Projekts, wo Sie DbContext ist), so dass es verwendet diese neue sql-generator:Wenn jetzt also generieren Sie ein Skript mit der -Script-tag, können Sie sehen, dass die
insert into [__MigrationHistory]
ist umgeben vonGO
Alternativ können Sie in der Implementierung von
SqlServerMigrationSqlGenerator
können Sie überschreiben Teil des Skriptes, derInsertHistoryOperation
war gut für uns geeignet.-Script
tag. Ich habe zu kommentieren, dieSetSqlGenerator(".....
Linie jedoch, wenn ich nicht verwenden, da sonst bekam ich erneut die Ausnahme. Dies jedoch spart mir eine Menge Zeit, weil es einfach auskommentieren einer Zeile an Stelle von hinzufügenSql("GO");
überall. Danke!Ich kann nicht finden, InsertHistoryOperation. Die Montage ist?
Ach, ich denke, es ist umbenannt in EF 6 zu HistoryOperation
InformationsquelleAutor Skyp
Wenn Sie versuchen, ändern Sie Ihre Ansicht mit
Sql("Alter View dbo.Foos As etc")
, dann vermeiden Sie dieshould be the first statement in a batch file
Fehlers ohne hinzufügenGO
Aussagen, indem Sie die sql in eineEXEC
Befehl:Sql("EXEC('Alter View dbo.Foos As etc')")
WOW, das ist wirklich einfach und funktioniert! vielen Dank dafür!
Beste anwers, danke !!
Wo ist die EXEC-Funktion definiert bitte? Ich bin nicht in der Lage, es zu finden.
Es ist standard-Sql. Ich hatte es versäumt, die Anführungszeichen werden benötigt, um die Sql-Zeichenfolge. Ich habe bearbeitet die Antwort, den Fehler zu korrigieren
InformationsquelleAutor Colin
Wiederum aus dem Konzept bestehen, die tief in die
SqlServerMigrationSqlGenerator
als optionales argument fürStatement(sql, batchTerminator)
. Hier ist etwas, was sich auf Skyp Idee. Es funktioniert sowohl im Skript-Modus ist oder nicht. Die GOs sind für die verschiedenen Operationen als für Skyp nur, weil unsere Bedürfnisse sind ein wenig anders. Sie müssen dann registrieren Sie diese Klasse in derConfiguration
als pro Skyp Anweisungen.Dieser arbeitete für mich, wenn EF6 wurde aus unerklärlichen Gründen das entfernen einer go-Anweisung aus dem Ende meiner gespeicherten Prozedur erstellen Skript eingefügt werden, die über SqlResource. Die Magie der EF ist nicht etwas, ich bin gern.
InformationsquelleAutor Yepeekai
Ersetzen Sie einfach die aktuelle Anweisung mit ein .Replace ("", "");
InformationsquelleAutor Wouter Van Ranst