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

时间:2019-04-26 16:45:54

标签: sql-server entity-framework-6 ef-migrations

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

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

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

ALTER FUNCTION myFunc
...
GO
GO

我希望能够通过EF或通过生成脚本来运行迁移,并且使两者都能运行而无需更改任何配置或手动修改脚本。

1 个答案:

答案 0 :(得分:0)

我找到了解决此问题的奇怪方法:

GO
--any arbitrary comment here
GO

我的猜测是EF将从GO通话结束时删除Sql()

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

包含任意注释似乎意味着仅删除最后一个GO,但保留第一个。无论我是通过EF运行迁移还是生成要在SSMS中运行的脚本,这对我都有效。