it-swarm.com.de

Können wir ein SQL-Skript mit Code-First-Migrationen ausführen?

Können wir SQL-Skripte mit Code-First-Migrationen ausführen?

Ich bin neu in der Programmierung und möchte meine Änderungen in einer SQL-Skriptdatei speichern, bevor der Befehl update-database für die Migration ausgeführt wird. Ist dies möglich?

Wenn möglich, geben Sie bitte die erforderlichen Schritte an. Auch wenn ein Skript generiert wird, ist es dann möglich, dass ich dieses Skript mithilfe der Migration ausführen kann?

41
Manprit Singh

Zuerst müssen Sie eine Migration erstellen.

Add-Migration RunSqlScript

Dann können Sie in der generierten Migrationsdatei 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 rennst du

Update-Database
67
Rikard

Was ich gerne mache, ist, das SQL-Skript als Ressource in die Assembly einzubetten und die SqlResource -Methode zu verwenden. Ich habe diesen Ansatz mit Visual Studio 2017 15.5.6 getestet.

Zuerst müssen Sie eine Migrationsdatei erstellen:

  1. Stellen Sie in Visual Studio sicher, dass Sie als Startprojekt das Projekt festlegen, in dem Ihr DbContext definiert ist
  2. Öffnen Sie in Visual Studio die PMC: Ansicht -> Andere Windows -> Package Manager-Konsole
  3. In PMC Legen Sie das Standardprojekt auf das Projekt fest, das den DbContext enthält
  4. Wenn Sie sowohl EF Core als auch EF 6.x installiert haben:

    EntityFramework\Add-Migration RunSqlScript

  5. Wenn Sie nur EF 6.x installiert haben:

    Add-Migration RunSqlScript

Fügen Sie ein SQL-Skript in den Migrationsordner ein (ich benenne es mit demselben Präfix wie die Migrationsdatei)

Migration folder in the Solution Explorer

Stellen Sie im Dateieigenschaftenfenster sicher, dass die Build-Aktion "Eingebettete Ressource" ist. Beachten Sie, dass Sie keine Kopie in den Ausgabeordner vornehmen 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

23

Wie SQL haben wir eine andere Methode SqlFile. Sie können das direkt verwenden.

7

Für .NET Core und EF Core können Sie bei Migrationen so etwas tun

protected override void Up(MigrationBuilder migrationBuilder)
{
   var schema = "starter_core";
   migrationBuilder.Sql($"INSERT INTO [{schema}].[Roles] ([Name]) VALUES ('transporter')");
}
0
Monomachus