【发布时间】:2015-11-14 12:43:17
【问题描述】:
我最近一直在研究 EF 迁移的工作原理,但遇到了一个我无法真正理解的问题。
我正在阅读this 文章,这是我所看到的:
在这个阶段,开发人员 #2 可以运行 Update-Database,它将检测 新的 AddRating 迁移(尚未应用于 Developer 2的数据库)并应用它。现在 Rating 列已添加到 Blogs 表中,并且数据库与模型同步。
我无法了解 EF 如何确定它必须应用来自 AddRatings 迁移的更改。据我所知,工作流程如下:
- 假设我们在项目中有两个迁移(id 为 4 和 5)尚未应用到数据库(例如,我们获得了应用了 1、2 和 3 迁移的旧版本数据库)。李>
- 更新 Db 命令已运行。
- EF 转到数据库,查找 MigrationHistory 表并获取最新迁移。然后,EF 看到项目中有迁移 4 和 5,由于 db 中的最新迁移是 3,因此应用了 4 和 5。
但是,当我查看文章中的屏幕时,我并没有真正理解。以下是我期望的结果:
- 在 Dev 2 数据库中有迁移 First、AddUrl 和 AddReaders。
- EF 在数据库中查找最新的迁移 - 它是 AddReaders。
- 项目中最新的迁移也是AddReaders。
- 因此,根本不需要应用任何更改。
有一个问题是代码模型和最新的迁移模型不一样,但 EF 无论如何都能将更改应用到 db,尽管如文章所述会产生警告。
问题是,我的推理有什么问题,以及 EF 如何理解即使数据库和代码中的最新迁移相同,还必须应用另一个迁移。
此外,据我了解,MigrationHistory 中的压缩模型仅在运行 Add-Migration 命令时提供服务,与 Update-Database 命令无关。是这样吗?
【问题讨论】:
标签: c# database entity-framework migration