【问题标题】:There are no pending changes for EF migration and still it complains that there are pending changes. How does EF keep track of this?EF 迁移没有挂起的更改,但它仍然抱怨有挂起的更改。 EF 如何跟踪这一点?
【发布时间】:2015-01-06 13:54:33
【问题描述】:

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

现在,当我开始我的项目时,本地数据库似乎可以很好地创建我的新列,但我确实遇到了一个异常: “无法更新数据库以匹配当前模型,因为有待处理的更改并且自动迁移被禁用”

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

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

还有另一个问题 - 我想要限制我拥有的迁移文件的数量是错误的吗?我目前认为,在理想情况下,我的软件的每个版本最多应该只有 1 个迁移文件,以便更好地了解我的代码......

谢谢,

【问题讨论】:

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


    【解决方案1】:

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

    我推荐这篇文章:

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

    【讨论】:

    • 感谢您的明确答复。我真的很喜欢子文件夹 Idea。这样我仍然可以组织每个发布版本。 :-)
    【解决方案2】:

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

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

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

    • 如果有很多人参与该项目,那么跟踪数据库的版本将变得非常困难,并且会变得一团糟。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 2021-12-06
      • 1970-01-01
      • 2013-02-05
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多