2015-08-14 6 views
5

Sehr einfache Frage, bin ich mit Migrationen in Entity Framework 6, und wie der BefehlKann Entity Framework 6-Migrationen eine Transaktion um Skripts beinhalten?

update-database -script 

Aber ist es eine Möglichkeit, um das Skript zu erzeugen, doch haben sie mit einer Transaktion eingewickelt?

Problem ist, dass, wenn das Skript fehlschlägt, ich habe es unpick

+0

Sie diesen Ansatz konnte, obwohl langweilig: http://stackoverflow.com/questions/18528376/code-first-migrations-update-database-script-command-generated-sql-script-not –

Antwort

6

Das ist, was ich nur auf Release-Modus unter Verwendung der Skripte zu generieren:

public class MigrationScriptBuilder : SqlServerMigrationSqlGenerator 
{ 
#if !DEBUG 
    protected override void Generate(SqlOperation sqlOperation) 
    { 
     Statement("GO"); 

     base.Generate(sqlOperation); 

     Statement("GO"); 
    } 

    public override IEnumerable<MigrationStatement> Generate(IEnumerable<MigrationOperation> migrationOperations, string providerManifestToken) 
    { 
     yield return new MigrationStatement {Sql = "BEGIN TRAN"}; 

     foreach (var migrationStatement in base.Generate(migrationOperations, providerManifestToken)) 
     { 
      yield return migrationStatement; 
     } 

     yield return new MigrationStatement {Sql = "COMMIT TRAN"}; 
    } 
#endif 
} 

Sie, dass der Draht sollte in Ihrem DatabaseMigrationsConfiguration. Beispiel:

public sealed class DatabaseMigrationsConfiguration : DbMigrationsConfiguration<DatabaseContext> 
{ 
    public DatabaseMigrationsConfiguration() 
    { 
     SetSqlGenerator("System.Data.SqlClient", new MigrationScriptBuilder()); 
    } 
} 
+0

Wie benutzen Sie das? Wo soll ich das hinstellen? Kannst du '' 'update-database -script''' ausführen und es erzeugt das Skript mit einer Transaktion umwickelt? – Gillardo

+0

Entschuldigung, ich habe hinzugefügt, wo. – regisbsb

+0

Danke! Perfekte Antwort – Gillardo

Verwandte Themen