对模型进行更改后如何更新数据库快照以匹配数据库

T27*_*27M 4 c# database entity-framework

使用实体框架 6.1.3。和代码优先。

我目前在自己的分支机构工作,但使用开发数据库。另一位开发人员一直在主分支工作,并在我分支后将一些迁移应用到开发数据库。我通过添加额外的字段对分支中的一些模型进行了一些更改;我修改的这些模型的表已存在于数据库中(除了 1 个新模型)。

我的分支中的当前快照不是当前的实际数据库架构。通常我会先Add-Migration Merge -IgnoreChanges更新最新情况,然后进行更改。(正确的?)

问题是我所做的更改仍然需要应用于数据库,并且执行上述命令会忽略这些更改。当我构建新迁移时生成的代码试图撤消(删除/更改)在主分支上应用的所有迁移,并且它当前还可以看到我已更改的所有模型(以及一些其他模型) )作为新表,并尝试创建新表而不是添加新列。

解决这个问题的最佳方法是什么?是否可以从一开始就避免这种情况?

我想我可以将主分支合并到我的分支中以进行迁移,但不确定这是否可以解决我的问题。

生成的任何迁移在应用于我们的生产数据库时也需要起作用。

希望我已经解释得足够好了。我对 EF 还很陌生,因此我们将不胜感激。

小智 7

今天发生在我身上的事情是,我基本上丢失了整个 Migrations 文件夹,所以没有 Migration 文件,没有 Snapshot 文件,什么都没有。我想对数据库进行一些更新(在表上添加新列)。因此,我按照以下步骤操作并最终使其正常工作(包管理器控制台中的命令):

  1. Add-Migration temp- 这将生成一个迁移文件(它将重新创建整个数据库)和快照文件。显然这个快照文件对应的是当前的数据库状态;
  2. 删除迁移文件,不是通过键入Remove-Migration(因为这也会删除快照文件),而是直接删除文件(例如在解决方案资源管理器中)。此时我有当前的快照并且没有迁移;
  3. Add-Migration new_column_etc- 通过添加此迁移,由于我有一个快照可供比较,它实际上生成得很好,并且仅显示我所做的更改(以及我最初打算在数据库中更新的内容);
  4. Update-Database- 现在我的数据库已更新,快照文件对应于最新版本。

我知道它可能与最初的要求有些偏差,但在绝望的情况下,它可以提供一种将快照文件重新生成到当前版本的数据库的方法。