我最近一直在研究EF迁移的工作方式,而且我遇到了一个我无法理解的问题。
我正在阅读this文章,这就是我所看到的内容:
在此阶段,开发人员#2可以运行将检测的Update-Database 新的AddRating迁移(尚未应用于Developer 2的数据库)并应用它。现在,“评级”列已添加到“博客”表中,数据库与模型同步。
我无法得到的是EF如何确定它必须应用AddRatings迁移中的更改。据我所知,工作流程如下:
然而,当我从文章中看到屏幕时,我并没有真正理解它。以下是我的期望:
存在一个问题,即代码模型和最新的迁移模型不尽相同,但EF无论如何都能够对数据库应用更改,但会产生警告,如文章所述。
问题是,在我的推理中我犯了什么错误以及EF如何理解即使db和代码中的最新迁移是相同的,也必须应用另一个迁移。
另外,据我所知,当运行Add-Migration命令时,MigrationHistory中的压缩模型只提供 ,并且与Update-Database命令无关。是这样吗?
答案 0 :(得分:2)
执行更新时,EF会将程序集中的迁移集与数据库中的迁移集进行比较,并将所有缺少的迁移应用于数据库。丢失的迁移是在历史列表的末尾还是在中间的某个位置并不重要。
迁移按MigrationId
进行比较,因此您是对的,压缩模型与Update_Database
命令无关。