首先使用 DbUp 的实体框架代码



我正在考虑使用Entity Framework 6Code First进行数据库交互,同时使用DbUp进行数据库架构更新。问题是出于某种原因,我不想使用EF迁移。因此,我所达到的工作流程是:

  1. 更改模型(添加POCO、更改属性等)
  2. Visual Studio Package Manager Console运行Add-Migration temp_file
  3. Visual Studio Package Manager Console运行Update-Database -Script
  4. 获取生成的sql脚本,包括在表格__MigrationHistory中插入新行
  5. 创建一个新的.sql文件并粘贴生成的脚本
  6. 删除temp_file
  7. 运行数据库

它在本地和生产服务器上完美运行,但是每次生成新迁移时,我都不喜欢添加然后删除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");
}
}

相关内容

  • 没有找到相关文章

最新更新