首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在传递给DbMigration.SqlFile的SQL文件中允许运行吗?

在传递给DbMigration.SqlFile的SQL文件中允许运行吗?
EN

Stack Overflow用户
提问于 2017-08-25 16:54:45
回答 1查看 158关注 0票数 1

DbMigration.SqlFile法接受一个sqlFile参数,该参数期望磁盘上的SQL文件的路径,在调用该方法时执行该路径。

问题

是否允许将SQL文件提供给DbMigration.SqlFile方法的sqlFile参数,以便使用GO关键字分隔多批SQL语句?

是否允许GO取决于Server版本、实体框架版本、.NET运行时版本或其他版本?

全背景

我的项目是使用实体框架版本6。

我有一个从DbMigration继承的实体框架迁移类,它只在磁盘上运行一个SQL文件,例如:

代码语言:javascript
运行
复制
public override void Up()
{
    this.SqlFile("/sql/StoredProcedures/MyMigrationFile.sql");
}

该文件的内容如下:

代码语言:javascript
运行
复制
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)运行这些迁移时,这些迁移失败了:

代码语言:javascript
运行
复制
Incorrect syntax near 'GO'.

那么,问题是:

  • 在与GO方法一起使用的DbMigration.SqlFile文件中是否支持DbMigration.SqlFile?
  • 我的本地开发PC和我团队的CI服务器之间有什么相关的区别,导致迁移在本地失败,但是在CI中工作得很好?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-25 21:45:42

上面最初的文章中描述的问题将在运行单元测试时发生,因为项目被配置为使用实体框架迁移来创建和重构缺少的测试数据库,并在运行任何测试方法之前将其更新到最新的迁移中。

问题是Visual中的测试项目(即我们的测试类所在的单独的Visual .csproj )缺少对实体Framework包的引用。参考书以某种方式被破坏或损坏。

其一个症状是,在Visual中从Package控制台窗口运行Get-Package时,Entity根本没有出现在测试项目的引用列表中。

解决方案是通过以下方法修复Package控制台窗口中测试项目的实体框架引用

  1. 在“默认项目”下拉列表中,选择了我的测试项目;
  2. Ran:Install-Package EntityFramework

在这样做之后,迁移成功地运行。不再发生Incorrect syntax near 'GO'错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45886212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档