Man*_*ngh 44 c# sql-server asp.net-mvc entity-framework asp.net-mvc-4
我们可以使用代码优先迁移来运行sql脚本吗?
我是新手代码,如果我想在迁移的update-database命令之前将我的更改保存到SQL脚本文件,是否可能?
如果可能,请提供完成工作的步骤.此外,如果生成脚本,那么我是否可以使用迁移运行该脚本?
Rik*_*ard 72
首先,您需要创建迁移.
Add-Migration RunSqlScript
Run Code Online (Sandbox Code Playgroud)
然后在生成的迁移文件中,您可以编写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));
Run Code Online (Sandbox Code Playgroud)
然后你跑
Update-Database
Run Code Online (Sandbox Code Playgroud)
Yan*_*lla 29
我喜欢做的是将SQL脚本作为资源嵌入到程序集中并使用该SqlResource
方法.我已经使用Visual Studio 2017 15.5.6测试了这种方法.
首先,您需要创建一个迁移文件:
DbContext
定义如果您同时安装了EF核心和EF 6.x:
EntityFramework\Add-Migration RunSqlScript
如果您只安装了EF 6.x:
Add-Migration RunSqlScript
在迁移文件夹中添加一个Sql脚本(我用与迁移文件相同的前缀命名它)
在"文件属性"窗口中,确保"构建操作"为"嵌入式资源"请注意,我们无需复制到输出文件夹,因为sql脚本将嵌入到程序集中.
在RunSqlScript
迁移中更新Up方法
public override void Up()
{
string sqlResName = typeof(RunSqlScript).Namespace + ".201801310940543_RunSqlScript.sql";
this.SqlResource(sqlResName );
}
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助
对于 .NET Core 和 EF Core,您可以在迁移中执行类似操作
protected override void Up(MigrationBuilder migrationBuilder)
{
var schema = "starter_core";
migrationBuilder.Sql($"INSERT INTO [{schema}].[Roles] ([Name]) VALUES ('transporter')");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
33267 次 |
最近记录: |