c# - 为什么 Add-Migration 有时会创建重复的迁移?

标签 c# .net database entity-framework ef-code-first

我在 Entity Framework 版本 5 中遇到代码优先迁移的奇怪问题。有时 Update-Database 由于未决更改而失败,但 Add-Migration 命令仅生成迁移上次迁移中已包含数据库更改,并且数据库是最新的。因此,我希望新迁移是空的。

Add-Migration 如何检测哪些更改到期?它似乎没有使用数据库作为来源。

最佳答案

数据库模型的快照与每次迁移一起保存在 .resx 文件中。添加新迁移时,EF 会将当前数据库模型(从模型类和 DbModelBuilder 的设置生成)与上次迁移进行比较,并确定它们之间的变化。

如果您的迁移不同步,则可能会出现您描述的问题。如果两个开发人员进行了两次独立的迁移,并且这些迁移稍后被合并回默认分支,我们就会遇到这种情况。

例子:

Developer 1

Migration AddColumnA

Developer 2

Migration AddColumnB

Merged version

Migration AddColumnA - database snapshot includes columnA

Migration AddColumnB - database snapshot includes columnB but not columnA

如果您添加另一个迁移,更改是根据迁移 AddColumnB 确定的,它不包含有关 columnA 的信息。此问题的解决方法是生成虚拟迁移(使用空的 Up 和 Down 方法),以便在上次迁移中获得正确的数据库模型快照。

Merged version

Migration AddColumnA - database snapshot includes columnA

Migration AddColumnB - database snapshot includes columnB but not columnA

Migration Dummy - database snapshot with columnA and columnB

关于c# - 为什么 Add-Migration 有时会创建重复的迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19136066/

相关文章:

c# - 当涉及到带有大量可选参数的函数时,约定是什么?

c# - ASP.net MVC RC2 - 具有显式值的复选框

c# - 如何在 .NET 5.0 控制台应用程序上检查 C# 中的 Windows 版本

mysql - 抽认卡语言项目的数据库架构/逻辑

database - 如何使用vba插入getdate函数

c# - IIS 8.5 ScriptResource.axd 500 错误和 Sys 未定义

c# - linq 按 2 个条件计数

c# - 没有得到数据表对象的计数

.net - WPF 数据模板 ItemsControl 指定初始值和最终值

java - 如何删除 [SQLITE_ERROR] SQL 错误或丢失数据库(6 列 1 个值)