如何删除完全添加新表的EF迁移

时间:2015-01-29 16:53:40

标签: entity-framework migration entity-framework-6 ef-migrations

我正在尝试删除迁移,但这会产生一些奇怪的情况。

要创建此迁移,我:

  1. 创建表示db
  2. 中的表的类
  3. 将其添加到我的DbContext
  4. 支持迁移
  5. 由于创建了新表,所有内容都按预期工作。直到我决定不再需要该表(但此时我已经创建了一些其他迁移 - 所以我试图删除的迁移不是最后一次)所以我:

    1. 在我要删除的迁移之前恢复为一次迁移
    2. 已删除的迁移
    3. 从DbContext
    4. 删除
    5. 删除了那个类(绝对粉碎了它并清空了回收站)
    6. 更新了我的数据库
    7. 我收到了一个错误:Unable to update database to match the current model because there are pending changes and automatic migration is disabled.为了找出确切的待处理内容,我尝试添加新迁移,并在其Up方法中删除新表格,删除不再存在的表格并创建Down方法中的那个表(与原始迁移完全相反)。

      我甚至试图删除我的数据库并从头开始生成,但没有成功 - 进入相同的状态。

      我试图尝试发现奇怪的行为:

      1. 当我添加该类并将其添加到DbContext时,我没有错误,但数据库中没有表
      2. 当我恢复新迁移时(在Down中创建一个新表) - 没有任何反应 - 表未创建
      3. 那么我怎样才能完全摆脱那个类和迁移呢?

1 个答案:

答案 0 :(得分:2)

这里有两种选择。

第一种是只添加一个额外的迁移来删除表。这是最简单的,可能是最好的做法"路线(特别是如果迁移已经在生产中)。唯一的缺点是你将有2次迁移只能用来互相取消。但这不一定是坏事。要做到这一点:

  1. 确保数据库更新为当前模型(包括表格)
  2. 删除实体类
  3. 删除DbContext中对它的引用。
  4. 生成新的迁移。新移民应该放弃。
  5. 更新数据库。
  6. 如果由于某种原因想要限制迁移次数,则需要执行以下操作:

    1. 删除数据库
    2. 删除要删除的迁移及其后的任何迁移
    3. 删除实体类
    4. 从DbContext中删除
    5. 更新数据库(您会收到一条警告,指出数据库与模型不匹配,但这没关系。)
    6. 添加迁移
    7. 更新数据库
    8. 快乐编码。