2015-08-14 7 views
5

domanda molto semplice, io sto usando le migrazioni in Entity Framework 6, e come il comandoLe migrazioni di Entity Framework 6 possono includere una transazione attorno agli script?

update-database -script 

Ma esiste un modo per generare lo script, ma l'ho avvolto con una transazione?

problema è che se lo script non riesce, devo scucire lo

+0

Si potrebbe prendere questo approccio, anche se noioso: http://stackoverflow.com/questions/18528376/code-first-migrations-update-database-script-command-generated-sql-script-not –

risposta

6

Questo è quello che sto usando solo sulla modalità di rilascio per generare gli script:

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 
} 

Si dovrebbe filo che nella vostra DatabaseMigrationsConfiguration. Esempio:

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

Come stai usando questo? Dove lo metto? Puoi eseguire '' 'update-database -script''' e genera lo script con una transazione in giro? – Gillardo

+0

scusate, ho aggiunto il dove. – regisbsb

+0

Grazie! Risposta perfetta – Gillardo