DbMigration.Sql 方法:我可以安全地使用“suppressTransaction”参数吗?

Col*_*lin 6 entity-framework entity-framework-migrations

当我想要创建或更改存储过程和视图时,我通过将 sql 放入如下语句中来避免“应该是批处理文件中的第一个语句”错误:EXEC

Sql(EXEC('Alter View dbo.Foos As etc'))
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但这确实意味着我必须一直逃避撇号。

我最近意识到DbMigration.Sql方法采用一个名为 的布尔参数suppressTransaction。文档中是这样描述的:

指示 SQL 是否应在用于迁移过程的事务之外执行的值。

所以我在没有使用的情况下对其进行了测试EXEC

例如Sql('Create View dbo.Foos As etc', true);

它有效,但我担心的是这个。如果我在迁移过程中的其他地方犯了错误怎么办?我假设其他所有内容都会回滚,但这个 Sql 不会。我最终会导致数据库处于不确定状态吗?如果这是真的,这个参数有什么用呢?