我们可以使用代码优先迁移来运行SQL脚本吗?

我们可以使用代码优先迁移来运行sql脚本吗?

我是新手代码,如果我想在update-database命令迁移之前将我的更改保存到SQL脚本文件,是否可能?

如果可能,请提供完成工作的步骤。 此外,如果生成脚本,那么我是否可以使用迁移运行该脚本?

首先,您需要创建迁移。

Add-Migration RunSqlScript 

然后在生成的迁移文件中,您可以编写SQL。

 // PLAIN SQL Sql("UPDATE dbo.Table SET Created = GETDATE()"); // FROM FILE var sqlFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Custom.sql"); Sql(File.ReadAllText(sqlFile)); 

然后你跑

 Update-Database 

我喜欢做的是将SQL脚本作为资源嵌入到程序SqlResource并使用SqlResource方法。 我已经使用Visual Studio 2017 15.5.6测试了这种方法。

首先,您需要创建一个迁移文件:

  1. 在Visual Studio中,确保将定义DbContext的项目设置为启动项目
  2. 在Visual Studio中打开PMC:查看 – >其他Windows – >程序包管理器控制台
  3. 在PMC中将默认项目设置为包含DbContext的项目
  4. 如果您同时安装了EF核心和EF 6.x:

    EntityFramework\Add-Migration RunSqlScript

  5. 如果您只安装了EF 6.x:

    Add-Migration RunSqlScript

在迁移文件夹中添加一个Sql脚本(我用与迁移文件相同的前缀命名它)

Solution Explorer中的Migration文件夹

在文件属性窗口中,确保构建操作是“嵌入式资源”请注意,我们不需要复制到输出文件夹,因为sql脚本将嵌入到程序集中。

RunSqlScript迁移中更新Up方法

 public override void Up() { string sqlResName = typeof(RunSqlScript).Namespace + ".201801310940543_RunSqlScript.sql"; this.SqlResource(sqlResName ); } 

我希望这有帮助

像SQL一样,我们有另一种方法SqlFile。 你可以直接使用它。