繁体   English   中英

实体框架代码首先使用DbUp

[英]Entity Framework Code First with DbUp

我正在考虑使用Entity Framework 6 Code 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. 运行DbUp

它在本地和生产服务器上完美地工作,但是每次生成新的迁移时我都不习惯添加然后删除temp_file (我希望有一种方法可以永久停止将temp_file添加到解决方案中。)。

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

在大多数情况下,您可以通过使用自动代码优先迁移来跳过步骤(2)和(6):

自动迁移允许您使用代码优先迁移, 而无需在项目中为每个更改生成代码文件

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

AutomaticMigrationsEnabled = true;

有些事情需要考虑:

  • 文档指出自动迁移具有局限性,因此请注意。
  • 您可以混合自动和基于代码的迁移(换句话说,建议和您当前的方法)。
  • 当前方法的好处是,您可以预览EF如何解释模型更改,以及添加/删除/更改部分迁移代码。
  • 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");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM