我正在考虑使用Entity Framework 6
Code First
进行数据库交互,同时使用DbUp
进行数据库架构更新。问题是出于某种原因,我不想使用EF
迁移。因此,我所达到的工作流程是:
- 更改模型(添加
POCO
、更改属性等) - 在
Visual Studio Package Manager Console
运行Add-Migration temp_file
- 在
Visual Studio Package Manager Console
运行Update-Database -Script
- 获取生成的
sql
脚本,包括在表格__MigrationHistory
中插入新行 - 创建一个新的
.sql
文件并粘贴生成的脚本 - 删除
temp_file
- 运行数据库
它在本地和生产服务器上完美运行,但是每次生成新迁移时,我都不喜欢添加然后删除temp_file
(我希望有一种方法可以永久停止temp_file
添加到解决方案中。
那么问题:有没有更好的方法使用Entity Framework
进行数据库迁移DbUp
?
在大多数情况下,您可以使用自动代码优先迁移跳过步骤 (2) 和 (6):
自动迁移允许您使用代码优先迁移,而无需在项目中为每个更改提供代码文件。
默认情况下,自动迁移处于禁用状态。您可以通过添加以下内容来启用它们,例如在数据库迁移配置类构造函数(通常称为Configuration
,位于Migrations
子文件夹下):
AutomaticMigrationsEnabled = true;
需要考虑的一些事项:
- 文档指出自动迁移有限制,因此请注意。
- 您可以混合使用自动迁移和基于代码的迁移(换句话说,建议的方法和当前的方法)。
- 当前方法的好处是,可以预览 EF 解释模型更改的方式,还可以添加/删除/更改迁移代码的某些部分。
- 自动迁移已在 EF Core 中弃用(不存在),因此在 EF Core 项目中,必须使用与当前方法类似的方法,只是必须保留生成的迁移代码文件。
也许这个答案为时已晚,但也许它也很有用。我完全理解您使用实体框架作为ORM和用于架构迁移的不同工具的方法。但是选择 DbUp 需要您手动编写 SQL 或如上所述生成它们。我建议考虑使用FluentMigrator而不是DbUp。它遵循相同的理念,但允许使用流畅的语法在 C# 中编写迁移步骤。此外,它还支持降级,即回滚。
下面是一个示例:
[Migration(1)]
public class CreateUserTable : Migration
{
public override void Up()
{
Create.Table("Users");
}
public override void Down()
{
Delete.Table("Users");
}
}