Entity framework 实体框架:添加迁移失败,无法更新数据库
我已经在一个项目(VS2012 Express中的ASP.NET MVC)中使用Entity Framework(5.0)有一段时间了。但现在,我无法再添加迁移Entity framework 实体框架:添加迁移失败,无法更新数据库,entity-framework,Entity Framework,我已经在一个项目(VS2012 Express中的ASP.NET MVC)中使用Entity Framework(5.0)有一段时间了。但现在,我无法再添加迁移 PM > Add-Migration -projectName MyProject.DAL TestMigration Unable to update database to match the current model because there are pending changes and automatic migra
PM > Add-Migration -projectName MyProject.DAL TestMigration
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
我不知道这是否提供了任何线索,但“无法…”文本显示为红色
我已尝试启用自动迁移(这毫无意义,因为我正在尝试将挂起的模型更改写入基于代码的迁移),这会导致数据库中出现所需的迁移。但是,这不是我想要的,因为我在项目中没有迁移
我已尝试删除该数据库并重新创建该数据库。该数据库已重新创建(直到上次迁移),但当我尝试使用添加迁移时,仍会出现“无法更新…”错误
编辑
我尝试了-force参数,但没有任何区别
我的配置类的内容(在上一次迁移后我没有更改任何内容):
编辑2
当我在DbContext中注释以下行时,我发现我能够进行添加迁移:
//Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
//Database.SetInitializer(新的MigrateDatabaseToLatestVersion());
当我将上面的行保留为活动状态并注释掉配置文件中的所有内容时,它仍然无法工作。
为什么Database.SetInitializer行会导致这种奇怪的行为?从不使用自动迁移,这在过去给我带来了问题(向下迁移数据库时,请从一开始就使用正确的方法!) 此行应位于您的global.asax中:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
上面是我用于多层应用程序的addmigration命令
数据库更新也是如此
Update-Database -ConfigurationTypeName "SlaveConfiguration" -StartupProjectName "FacturatieMVCv2.Data" -Verbose -script
您可以重置实体框架来解决您的问题[但请记住,它将使迁移进入默认状态] 注意:在执行以下操作之前进行备份 您需要删除当前状态:
- 删除项目中的“迁移”文件夹
- 删除数据库中的_MigrationHistory表(可能位于系统表下)
Enable-Migrations -EnableAutomaticMigrations -Force
使用带或不带-启用自动迁移
最后,您可以运行:
Add-Migration Initial
在我的例子中,我遇到了相同的错误,因为在迁移过程中,我在构造函数方法的DbContext类上强制执行ObjectContext.CommandTimeout 尝试删除它
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 5000;
这对我很有用:
update-database -targetmigration:"0" -force -verbose
add-migration Initial
update-database
你能发布你的迁移配置文件吗?你试过-force参数了吗?我也遇到了同样的问题,swapneel下面的回答对我来说很有用,虽然有点极端。幸运的是,我正处于开始阶段,所以这不是一个太大的交易。这很奇怪,但这也发生在我身上。你救了我一天,先生,你可能会发现这一点ed回答帮助:有时你需要第二次迁移,或者你需要禁用在
初始
迁移中生成的代码。这里的关键是让数据库的元数据与初始迁移保持一致,然后再从那里开始。答案应该是答案。我显然太新了,无法理解解决方案。这是第二篇文章建议使用“添加迁移”,但…我在哪里键入此命令?您可以在Visual Studio的“包管理器控制台”中键入。请参阅命令列表:
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 5000;
update-database -targetmigration:"0" -force -verbose
add-migration Initial
update-database