Entity Framework 使用 DbUp 代码优先

Entity Framework Code First with DbUp

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

  1. 更改模型(添加 POCO、更改属性等)
  2. 运行 Add-Migration temp_fileVisual Studio Package Manager Console
  3. 运行 Update-Database -ScriptVisual Studio Package Manager Console
  4. 获取生成的 sql 脚本,包括在 table __MigrationHistory
  5. 中插入新行
  6. 创建一个新的 .sql 文件并通过生成的脚本
  7. 删除temp_file
  8. 运行 DbUp

它在本地和生产服务器上都能完美运行,但是我觉得 table 每次生成新迁移时添加然后删除 temp_file 感觉不舒服(我希望有一种方法永久停止将 temp_file 添加到解决方案中。)。

所以问题: 有没有更好的方法来使用 Entity Framework 使用 DbUp 进行数据库迁移?

在大多数情况下,您可以使用 Automatic Code First Migrations:

跳过步骤 (2) 和 (6)

Automatic Migrations allows you to use Code First Migrations without having a code file in your project for each change you make.

默认情况下禁用自动迁移。您可以通过在数据库迁移配置中添加以下内容来启用它们 class 构造函数(通常称为 Configuration 并位于 Migrations 子文件夹下):

AutomaticMigrationsEnabled = true;

需要考虑的一些事项:

  • 文档指出自动迁移有局限性,因此请注意。
  • 您可以混合使用自动迁移和基于代码的迁移(换句话说,建议的方法和您当前的方法)。
  • 您当前方法的好处是您可以预览 EF 如何解释您的模型更改以及 add/remove/change 部分迁移代码。
  • 自动迁移在 EF Core 中已被弃用(不存在),因此在 EF Core 项目中,您必须使用与当前方法类似的方法,除了您必须保留生成的迁移代码文件。

也许这个答案为时已晚,但也许它也会有用。我完全理解您将 Entity Framework 用作 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");
    }
}