【问题标题】:How to solve Update-Database issue when switching branch?切换分支时如何解决更新数据库问题?
【发布时间】:2018-03-06 09:33:19
【问题描述】:

我有一个实体,它在分支 A 中有一个 int 列。现在我切换到不同的分支 B。在那里我创建了一个迁移并将列更改为varchar 并运行Update-Database。现在如果我再次切换到分支 A。如果我在代码中看到列数据类型是int,但在数据库中,它的数据类型是varchar。但我希望它的数据类型为int。我什至无法从分支 A 中删除此迁移,因为它是在分支 B 中创建的。我只能看到解决此问题的一种方法是删除数据库并运行 @ 987654327@,但是这样做会丢失所有数据。有没有更好的方法来解决这个问题。

我正在使用实体框架核心 2.0.1。

【问题讨论】:

    标签: c# asp.net-core ef-code-first entity-framework-core aspnetboilerplate


    【解决方案1】:

    我能想到两个选择:

    1. 为每个分支使用不同的数据库(可能是最好的主意,恕我直言)
    2. 在切换回分支 A 之前,使用 Update-Database name-of-previous-migration 取消应用从数据库的迁移

    例如,假设您有以下迁移:

    • 20180214094058_Initial.cs
    • 20180216100541_FirstMigration.cs
    • 20180218185111_MigrationBranchB.cs

    您可以用Update-Database FirstMigration 取消应用MigrationBranchB(这将调用MigrationBranchBDown 方法)。

    相关documentation

    恢复迁移

    如果您已经将迁移(或多个迁移)应用到数据库但需要恢复它,您可以使用相同的命令来应用迁移,但指定要回滚到的迁移的名称。

    Update-Database LastGoodMigration

    【讨论】:

    • 但我想最终将这些更改应用到具有现有数据的实际数据库中。
    • 如果我理解正确,您在分支 B 中应用了一个错误的迁移(您想要一个 int),您想要保留列中的数据,但是作为 int 而不是 varchar?
    • 假设分支 A 是主分支,我有一个功能分支 B。我将指向同一个 DB。
    • 迁移是有意的
    • 所以你可以将分支 B 合并到分支 A 中?
    猜你喜欢
    • 1970-01-01
    • 2020-01-29
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多