【问题标题】:Code Migrations is skipping initial code migration代码迁移正在跳过初始代码迁移
【发布时间】:2013-08-06 06:54:00
【问题描述】:

使用 Entity Framework 5,我们在我们的应用程序中使用代码优先迁移。每个开发人员都有自己工作的数据库。

我不小心清空了我的:里面什么都没有了,没有表,甚至没有迁移历史表。

所以,我尝试通过执行update-database 再次通过PM 控制台更新数据库。它立即给了我一个表不存在的错误,而它应该在我的初始代码迁移中创建。

有趣的是,PM 控制台还显示正在应用的迁移,其中不包含初始创建代码迁移,因此根本不会创建任何表,当然在以后的迁移中失败。

我尝试执行update-database -targetmigration:initialcreate,它告诉我该代码迁移不存在,而它是从 cs 文件直接复制/粘贴,因此 id 必须正确(注意:这适用于其他迁移) .

我还尝试了update-database -targetmigration:0update-database -targetmigration: $InitialDatabase,它们都给了我'Target database is already at version 0'

我也尝试过完全删除数据库并让 EF 为其创建它,但也没有用,它一直在跳过 initialcreate 迁移。

那么如何让代码迁移来执行我的 initalCreate 代码迁移?

【问题讨论】:

    标签: asp.net-mvc entity-framework entity-framework-migrations


    【解决方案1】:

    至少可以说,在团队场景中使用 EF 迁移并不理想。我的团队遵循的最佳实践是从不提交迁移。迁移是个人的,仅适用于您的特定数据库实例。如果每个人都提交自己的迁移,那么你很快就会陷入混乱。

    虽然与您的问题没有直接关系,但有些人可能想知道您如何处理生产迁移。简单地说,你没有。您的发布经理,或任何将实际推送发布的人,应生成 SQL 以立即应用所有更改,然后将其交给您的 DBA,或管理生产数据库的任何人。

    也就是说,在您描述的情况下,您的数据库已被清空。最好的解决方法是删除 Migrations 文件夹中的所有迁移。甚至特别是初始迁移(无论如何,它们并不重要,因为您不应该在个人代码库之外坚持使用它们)。然后生成一个新的迁移,这将触发 EF 将您当前的数据库状态(空)与应用程序的状态进行比较,并根据您的应用程序的当前状态创建一个新的初始迁移。然后,您可以应用此迁移。

    【讨论】:

    • 这种方法看起来合乎逻辑且安全可靠,我从来没有这样想过。确实,团队场景中的代码迁移并不总是很好。我们将考虑在下一个项目中使用这种方法。此外,您为空数据库提供的解决方案效果很好。谢谢!! :)
    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2016-05-26
    • 1970-01-01
    相关资源
    最近更新 更多