EF迁移没有待处理的更改,但仍然抱怨有待更改。 EF如何跟踪这一点?

时间:2014-11-10 09:45:52

标签: c# entity-framework migration database-migration

我的项目中有几个迁移文件,因为我对上次迁移进行了手动修改,所以我不想使用“包管理器控制台”重新生成它。我只需要添加1列。所以手动添加了以前的迁移(我可以这样做,因为还没有人升级)。

现在,当我启动我的项目时,本地数据库似乎创建了我的新列,但我确实得到了一个例外: “无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移”

看起来我能解决这个问题的唯一方法是生成一个额外的迁移 - 尽管这个migation生成的代码行完全与我在之前的迁移中手动编写的代码相同...

我很想知道 - EF如何跟踪这一点,有没有办法绕过它?

另一个问题 - 我想要限制我拥有的迁移文件数量是不对的?我目前认为在理想的情况下,我的软件的每个版本最多只能有1个迁移文件,以便更好地概述我的代码......

谢谢,

2 个答案:

答案 0 :(得分:3)

EF将序列化模型的哈希值保存在_MigrationHistory表中,并在使用迁移时对它们进行比较,以确保数据库架构与模型匹配。我不建议试图绕过这个。如果您希望最大限度地减少文件数量,则可以回滚然后组合迁移。但我不认为这是值得的。我只是定期将我的迁移放入子文件夹

我推荐这篇文章:

http://elegantcode.com/2012/04/12/entity-framework-migrations-tips/

答案 1 :(得分:0)

检查数据库中名为 _MigrationHistory 的表格。这将包含您运行的迁移历史记录。

我不认为单一迁移是个好主意。这是因为:

  • 每次迁移都类似于数据库的版本。您可以通过执行“update-database -target migration MigrationName”返回任何版本。

  • 如果有很多人在开展这个项目,很难跟踪你的数据库是什么版本,而且会变得混乱。

如果您想添加额外的列,您可以 - 强制它以前的迁移。否则,最好进行多次迁移以避免混淆。