使用Entity Framework 5,我们在应用程序中使用了代码优先迁移。每个开发人员都有自己的数据库。
我意外地清空了我的:没有任何东西,没有桌子,甚至没有迁移历史表。
因此,我尝试通过执行update-database
再次通过PM控制台更新数据库。它immediatley给了我一个表不存在的错误,而它应该在我的初始代码迁移中创建。
有趣的是,PM控制台还会显示正在应用的迁移,其中不包含初始创建代码迁移,因此根本不会创建任何表,并且在以后的迁移中会失败。
我尝试执行update-database -targetmigration:initialcreate
,它给我的信息是代码迁移不存在,而它是来自cs文件的直接复制/粘贴,因此id必须正确(注意:这适用于其他迁移)。
我还尝试了update-database -targetmigration:0
和update-database -targetmigration: $InitialDatabase
,它们都给了我'Target database is already at version 0'
。
我也尝试完全删除数据库并让EF创建它,也没有工作,它一直在跳过初始创建迁移。
那么如何让Code Migrations执行我的initalCreate代码迁移?
答案 0 :(得分:2)
至少可以说,在团队方案中使用EF迁移并不理想。我的团队遵循的最佳做法是从不提交迁移。迁移是个人的,仅适用于您的特定数据库实例。如果每个人都进行自己的迁移,那么最终会很快陷入困境。
虽然与您的问题没有直接关系,但有些人可能会想知道您是如何处理生产迁移的。简单地说,你没有。您的发布经理或实际推动发布的任何人都应该生成SQL以立即应用所有更改,然后将其交给您的DBA或管理生产数据库的任何人。
也就是说,在您描述的场景中,数据库已被清空。最佳解决方法是删除Migrations文件夹中的所有迁移。甚至尤其是初始迁移(无论如何,它们无关紧要,因为您不应该在个人代码库之外持有它们)。然后生成一个新的迁移,它将触发EF将您当前的数据库状态(空)与应用程序的状态进行比较,并基本上根据应用程序的当前状态创建一个新的初始迁移。然后,您可以应用此迁移。