2015-08-14 35 views
5

很簡單的問題,我使用的遷移在實體框架6,而像命令實體框架6遷移可以包含圍繞腳本的事務嗎?

update-database -script 

但有生成腳本的方式,但有它包裹着一個交易?

問題是,如果腳本失敗,我要拆散它

+0

你可以採取這種方法,雖然繁瑣:http://stackoverflow.com/questions/18528376/code-first-migrations-update-database-script-command-generated-sql-script-not –

回答

6

這是我使用的唯一的釋放模式如何生成腳本:

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 
} 

你應該連線,在您的DatabaseMigrationsConfiguration。例如:

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

你好嗎?我把這個放在哪裏?你可以運行'''update-database -script'''並且它會生成一個包含事務的腳本? – Gillardo

+0

對不起,我添加了哪裏。 – regisbsb

+0

謝謝!完美答案 – Gillardo