2014-02-12 7 views
12

Ich verwende Entity Framework Migrations für Code, um zuerst mein Datenbankmodell zu steuern. Es wirkt charmant und ich kann bis jetzt alles handhaben. Aber jetzt muss ich einen Datenbanktrigger hinzufügen und ich möchte dies mit EF Migrations tun und nicht nur ein separates SQL-Skript für diesen Fall verwenden. Dies wäre für die Kunden verwirrend, besonders nachdem wir sie davon überzeugt haben, dass wir alles damit umgehen können EF Migrationen). Mein Trigger ist gerade nach vorne und sieht aus wie tis:Datenbankauslöser mit Entity Framework-Code hinzufügen Erste Migrationen

CREATE OR REPLACE TRIGGER [name] BEFORE UPDATE ON myTable ... 

Gibt es einen Befehl, um einen Trigger zu EF Migrations hinzufügen?

+0

Check-out der Lösung kam ich mit: [EntityFramework.Triggers] (http://github.com/NickStrupat/EntityFramework.Triggers). Es ist auch auf NuGet. –

+0

Sieht vielversprechend aus. Weißt du, wenn es mehrere Datenbanksysteme unterstützt (Oracle, SQL-Server usw.) – StefanG

+0

Ich habe es nur mit SQL Server getestet, aber es ist alles auf Provider-Agnostic Weise auf Entity Framework gebaut. Es hängt von 'DbContext' ab. –

Antwort

23

Sie können einfach einen Methodenaufruf Sql("SQL COMMAND HERE") zu der Methode Up Ihrer Migration hinzufügen. Vergessen Sie nicht, auch die Drop-Anweisung zur Down-Methode hinzuzufügen. Sie können bei Bedarf eine leere Migration erstellen, indem Sie einfach Add-Migration ohne Änderungen am Modell ausführen.

public partial class Example : DbMigration 
{ 
    public override void Up() 
    { 
     Sql("CREATE OR REPLACE TRIGGER [name] BEFORE UPDATE ON myTable ..."); 
    } 

    public override void Down() 
    { 
     Sql("DROP TRIGGER [name]"); 
    } 
} 
+1

Sie können auch IF NOT EXISTS hinzufügen (wählen Sie * aus sys.triggers mit name = 'name') zu UP(), um es idempotent zu machen. – eoghank

+13

@eoghank. Ich bin mir nicht sicher, ob ich dem zustimme. Die Idee von Migrationen ist, dass sie in alle Richtungen wiederholbar sein sollten, und dass sie daher verhindern, dass diese Situation eintritt. Wenn wir Existenztests benötigen, verwenden wir theoretisch keine Migrationen - da wir keine Existenzprüfung für Tabellen durchführen, sollten wir nicht nach Triggern suchen. –

+1

Verwenden Sie für EF core migrationBuilder.Sql ("blah blah ..."); – wye

Verwandte Themen