我正在使用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或通过生成脚本来运行迁移,并且使两者都能运行而无需更改任何配置或手动修改脚本。
答案 0 :(得分:0)
我找到了解决此问题的奇怪方法:
GO
--any arbitrary comment here
GO
我的猜测是EF将从GO
通话结束时删除Sql()
:
Sql(@"
--actual SQL here
GO");
包含任意注释似乎意味着仅删除最后一个GO
,但保留第一个。无论我是通过EF运行迁移还是生成要在SSMS中运行的脚本,这对我都有效。