是否可以使用 sql 文件作为 EF 数据库迁移?
Posted
技术标签:
【中文标题】是否可以使用 sql 文件作为 EF 数据库迁移?【英文标题】:is it possible to use sql files as EF database migrations? 【发布时间】:2016-01-03 03:00:44 【问题描述】:我正在使用 EF6.0 并使用 SQLServerDatabaseProject 实现我的数据库。 我想使用 EF 迁移工具进行数据库迁移。但由于我在 DbProject 上有我的数据库,我希望我的所有迁移文件都是 SQLFiles(不是 c#) 所以我想知道 EF 是否支持此功能,如果不支持,是否可以编写一个新的 Migration 类来保留 EF 功能但以这种方式工作?
还请考虑我不希望 EF 生成我的迁移,但我希望能够使用其他迁移命令,例如 update-database 和 ...
==有关问题的更多详细信息==
我不想让 c# 类加载我的 sql 文件。必须直接保存 sql 文件以进行向上和向下迁移,并将其视为 DbMigration 类。 Migrations 目录的一个简单示例如下所示:
Migrations
-> up
-> 201510060807125_alter-course-change-family.sql
-> 201510060813136_alter-course-add-mark-column.sql
-> down
-> 201510060807125_alter-course-change-family.sql
-> 201510060813136_alter-course-add-mark-column.sql
【问题讨论】:
【参考方案1】:虽然您可以使用SqlFile
方法,但我建议您将其写在迁移文件夹中Configuration.cs
文件的Seed
方法上。
internal sealed class Configuration : DbMigrationConfiguration<YourDbContext>
protected override void Seed(YourDbContext context)
base.Seed(context);
context.Database.ExecuteSqlCommand(FileReadAllText("migration.sql"));
如果您在 Up
方法中编写迁移。当您更新数据库时,它将在每次迁移时执行,我认为您不会期望。
您想要的是每个Update-Database
运行您的脚本。 (不是每个迁移)
【讨论】:
感谢答案,但我想知道是否可以使用 SQL 文件而不是 c# 类进行迁移【参考方案2】:只需在迁移类中使用SqlFile
扩展方法:
public partial class MyFancyMigration : DbMigration
public override void Up()
SqlFile("myUpSQLFile.sql");
public override void Down()
SqlFile("myDownSQLFile.sql");
【讨论】:
感谢您的回答,但我想知道是否可以使用 SQL 文件而不是 c# 类进行迁移。以上是关于是否可以使用 sql 文件作为 EF 数据库迁移?的主要内容,如果未能解决你的问题,请参考以下文章
在.NET Core类库中使用EF Core迁移数据库到SQL Server
如何使用 Docker 在 SQL Server 数据库上运行 EF Core 迁移?