在 EF 迁移中使用多个 SQL 语句 - 如何在 SSMS 中使用 GO to 运行?

Using multiple SQL statements in EF migration - how to use GO to run in SSMS?

我正在使用 EF6 迁移重命名一些列,并且需要更新使用这些列的几个函数、视图和存储过程。我想将这些作为单独的 Sql() 调用添加到不同的私有方法中,以便整体迁移更易于阅读。

当我这样做时,我可以 运行 使用 update-database 进行迁移而没有任何问题,但是如果我生成脚本(使用 update-database -script),脚本不会 运行 完全是因为 'ALTER FUNCTION' must be the first statement in a query batch..

我曾尝试在每个 Sql() 语句的末尾放置一个 GO,但是当 EF 生成脚本时,它删除了 GO。如果我尝试使用其中两个(见下文),EF 会给出错误 The argument 'sql' cannot be null, empty or contain only white space.

ALTER FUNCTION myFunc
...
GO
GO

我希望能够 运行 通过 EF 或通过生成脚本进行迁移,并且无需更改任何配置或手动修改脚本即可使两者正常工作。

我发现了一个奇怪的解决方法:

GO
--any arbitrary comment here
GO

我的猜测是 EF 将从 Sql() 调用的末尾删除 GO

Sql(@"
--actual SQL here
GO");

包括任意注释似乎意味着只有最后的 GO 被删除,但保留了最初的。这对我有用,无论我是 运行 通过 EF 迁移还是在 SSMS 中生成脚本到 运行。