如何清理并为现有数据库生成新的迁移?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何清理并为现有数据库生成新的迁移?相关的知识,希望对你有一定的参考价值。

我们希望摆脱100多个迁移类,因为生产中的DB模式是最终的。

以下是我遵循的步骤:

  1. 删除迁移文件夹。
  2. 添加迁移 - ??

什么命令行切换,可以帮助我们?

编辑:

如果一切顺利,Up()迁移方法应该是空的吗?例如,以下是Add-Migration的错误生成。因为如果我们执行项目,我们将得到重复的表错误。

public partial class Sanity : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "dbo.AccountPreferences",
            c => new
            {
                AccountID = c.Guid(nullable: false),
            }
            .... for 1000s of tables
      }
}

干净的迁移将是一件事:在后续更改中尝试Add-Migration时,不应该出现任何错误。

无法生成显式迁移,因为以下显式迁移正在等待处理:[201712281054591_Sanity]。在尝试生成新的显式迁移之前应用挂起的显式迁移。

正如你所看到的,如果我们碰巧执行Update-Database会得到表已经存在的错误。

我们是否被迫始终保留所有迁移副本?

答案

看看这是否有帮助:

MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"

Entity framework code first - how to run Update-Database for production database

How to delete and recreate from scratch an existing EF Code First database


注意: 我是从记忆中写的,如果你有问题让我知道,我会仔细检查。 另外,我对此的了解来自EF的稍微旧版本,因为我最近没有做太多工作,但我怀疑已经发生了很大变化。

据我所知,如果你想...... a)保持数据库, b)清理项目迁移, c)使2'匹配',同步:

请执行下列操作: - 删除迁移文件夹(您的项目) - 运行Add-Migration Initial - 然后应该添加一个迁移 - 注意:它是安全的,但在下一步之前进行备份,更改连接字符串等 - 运行Update-Database -Script - 不更新数据库但创建SQL脚本,包括迁移表 - 找到INSERT INTO [__MigrationHistory]记录,只需运行那些(在你的数据库上),将它们插入数据库

...然后再次使用Add-Migration进行测试,看看它是否会产生任何结果,不应该产生新的迁移,空的迁移。

请仔细阅读上面的第一个链接,并根据需要调整方法。

我确信可能会有更简单,更短的方法(通过PM控制台),但目前还没有意识到这一点。

另一答案

想知道“最终”会持续多久?

使用:

Add-Migration Initial 

删除迁移文件夹后

另一答案

打开你的数据库。

清除表__MigrationHistory

删除文件夹中的迁移

运行Add-Migration MigrationName

以上是关于如何清理并为现有数据库生成新的迁移?的主要内容,如果未能解决你的问题,请参考以下文章

Rails迁移以将主键添加到现有表

如何将现有核心数据 iOS 7 应用程序的数据迁移到 iCloud?

如何从现有迁移文件中删除脚本 rails

Laravel/lumen 5.2 从现有数据库生成迁移表

如何避免使用自动代码优先迁移重新创建现有数据库

将现有 auth.User 数据迁移到新的 Django 1.5 自定义用户模型?