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

How to Cleanup & generate fresh migration for existing DB?

我们希望摆脱 100 次迁移 类,因为生产中的数据库模式是最终的。

Here are the steps I followed:

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

什么命令行开关,能帮到我们吗?

编辑:

If all goes well Up() method of migration should be empty right? For example following is wrong generation on Add-Migration. Because if we execute the project we will get duplicate table errors.

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 后续更改时,不应出现任何错误。

Unable to generate an explicit migration because the following explicit migrations are pending: [201712281054591_Sanity]. Apply the pending explicit migrations before attempting to generate a new explicit migration.

如您所见,如果我们碰巧执行 Update-Database 将得到 table 已经存在的错误。

Are we forced to always retains all migration copies?

不知道会持续多久 "final"?

使用:

Add-Migration Initial 

删除迁移文件夹后

打开你的数据库。

清除table__MigrationHistory

删除文件夹中的迁移

运行 Add-Migration MigrationName

看看这是否有帮助:

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 'match',同步:

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

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

请通读上面的第一个 link 并根据需要调整方法。

我确信可能有更简单、更短的方法来执行此操作(通过 PM 控制台),但目前还不知道。

几乎与接受的相同,但没有编写初始迁移脚本。

  • 删除 __MigrationHistory 数据库 table
  • 删除迁移文件夹中的所有迁移文件
  • 运行 Add-migration Initial 在程序包管理器控制台中
  • 注释掉Initial Migration中Up方法里面的代码
  • 运行 Update-database 在 PM 控制台中(只是为了创建一个迁移条目)
  • 删除初始迁移中的注释