1

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

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

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

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

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

我也试过了update-database -targetmigration:0update-database -targetmigration: $InitialDatabase两者都给了我'Target database is already at version 0'

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

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

4

1 回答 1

2

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

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

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

于 2013-08-05T16:15:59.867 回答