DbMigration.SqlFile法接受一个sqlFile
参数,该参数期望磁盘上的SQL文件的路径,在调用该方法时执行该路径。
问题
是否允许将SQL文件提供给DbMigration.SqlFile方法的sqlFile
参数,以便使用GO
关键字分隔多批SQL语句?
是否允许GO
取决于Server版本、实体框架版本、.NET运行时版本或其他版本?
全背景
我的项目是使用实体框架版本6。
我有一个从DbMigration继承的实体框架迁移类,它只在磁盘上运行一个SQL文件,例如:
public override void Up()
{
this.SqlFile("/sql/StoredProcedures/MyMigrationFile.sql");
}
该文件的内容如下:
DROP PROCEDURE [dbo].[MyStoredProcedure]
GO
CREATE PROCEDURE [dbo].[MyStoredProcedure]
@MyParameter int
AS
[Stored procedure SQL body here...]
事实上,我的项目中有几十个这样的迁移类和SQL文件,至少从2016年1月起,它们一直运行良好。
在我的团队的持续集成服务器(使用Visual 2015和SQL server 2014)上运行时,它们仍然工作正常。
但是,从昨天起,当我尝试在本地环境(使用Visual 2017和Server 2016)运行这些迁移时,这些迁移失败了:
Incorrect syntax near 'GO'.
那么,问题是:
GO
方法一起使用的DbMigration.SqlFile文件中是否支持DbMigration.SqlFile?发布于 2017-08-25 21:45:42
上面最初的文章中描述的问题将在运行单元测试时发生,因为项目被配置为使用实体框架迁移来创建和重构缺少的测试数据库,并在运行任何测试方法之前将其更新到最新的迁移中。
问题是Visual中的测试项目(即我们的测试类所在的单独的Visual .csproj )缺少对实体Framework包的引用。参考书以某种方式被破坏或损坏。
其一个症状是,在Visual中从Package控制台窗口运行Get-Package
时,Entity根本没有出现在测试项目的引用列表中。
解决方案是通过以下方法修复Package控制台窗口中测试项目的实体框架引用:
Install-Package EntityFramework
在这样做之后,迁移成功地运行。不再发生Incorrect syntax near 'GO'
错误。
https://stackoverflow.com/questions/45886212
复制相似问题