2015-08-20 7 views
24

Können wir SQL-Skript mit Code-Erstmigrationen ausführen?Können wir SQL-Skript mit Code-Erstmigrationen ausführen?

Ich bin neu zu Code zuerst und wenn ich meine Änderungen in einer SQL-Skriptdatei vor Update-Datenbank-Befehl der Migration speichern möchten, ist es möglich?

Wenn möglich, dann geben Sie bitte Schritte, um es zu erledigen. Auch wenn Skript generiert wird, ist es möglich, dass ich dieses Skript mit Migration ausführen kann?

Antwort

39

Zuerst müssen Sie eine Migration erstellen.

Add-Migration RunSqlScript 

Dann in der generierten Migrationsdatei können Sie Ihre SQL schreiben.

// PLAIN SQL 
Sql("UPDATE dbo.Table SET Created = GETDATE()"); 

// FROM FILE 
var sqlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Custom.sql"); 
Sql(File.ReadAllText(sqlFile)); 

Dann führen Sie

Update-Database 
+1

Das ist für mich wie ein Zauber funktioniert. Ich recherchierte weiter und fand heraus, dass wir mit dem unten stehenden Code eine vorerstellte Stored Procedure hinzufügen können. var sqlFile = Pfad.Kombinieren (AppDomain.CurrentDomain.BaseDirectory, @ "Custom.sql"); SQL (Datei.ReadAllText (sqlFile)); –

+0

Ich werde meine Antwort dann auch aktualisieren. – Rikard

+5

Wo platzieren Sie Ihre SQL-Dateien im Projekt, damit Sie sie zur Laufzeit abrufen können? 'Path.Combine (AppDomain.CurrentDomain.BaseDirectory' versetzt mich in das Debug-Verzeichnis. – webworm

5

wie SQL, wir eine andere Methode SQLFILE haben. das kannst du direkt nutzen.

+0

Haben Sie ein Beispiel? –

+0

Schreiben Sie die Zeile in Ihre generierte Migration.cs
SqlFile("Custom.sql")
Ref - [Msdn]: https://msdn.microsoft.com/en-us/library/dn857435(v=vs.113).aspx –

3

Was ich tun möchte, ist das SQL-Skript als eine Ressource in der Baugruppe einbetten und die SqlResource Methode verwenden. Ich habe diesen Ansatz mit Visual Studio 2017 15.5.6 getestet.

Zuerst müssen Sie eine Migrationsdatei erstellen:

  1. In Visual Studio stellen Sie sicher, als Start-up-Projekt, das Projekt zu setzen, wo Ihre DbContext definiert ist
  2. in Visual Studio öffnen Sie die PMC: Ansicht -> andere Windows--> Package Manager Console
  3. In PMC Stellen Sie das Standard-Projekt auf das Projekt, das die DbContext hält
  4. Wenn haben Sie beide EF Kern und EF 6.x installiert:

    EntityFramework\Add-Migration RunSqlScript

  5. Wenn Sie nur installiert EF 6.x:

    Add-Migration RunSqlScript

einen SQL-Skript in der Migration Ordner hinzufügen (Ich nenne es mit dem gleichen Präfix wie die Migration Datei)

Migration folder in the Solution Explorer

In th Im Dateieigenschaftenfenster stellen Sie sicher, dass die Build-Aktion "Eingebettete Ressource" ist. Beachten Sie, dass wir nicht in den Ausgabeordner kopieren müssen, da das SQL-Skript in die Assembly eingebettet wird.

Aktualisieren Sie die Up-Methode in der RunSqlScript Migration

public override void Up() 
{ 
    string sqlResName = typeof(RunSqlScript).Namespace + ".201801310940543_RunSqlScript.sql"; 
    this.SqlResource(sqlResName); 
} 

Ich hoffe, das hilft

+0

mochte ich diese Methode. Hinweis: Wenn Sie dies tun, versuchen Sie nicht, die '.sql' unter der Migrationsdatei zu verschachteln ... dies bricht das Embedded der Ressource. lasse es nicht verschachtelt. –

Verwandte Themen