我一直在项目中使用Entity Framework(5.0)一段时间(VS2012 Express中的ASP.NET MVC)。但是现在,我无法再添加迁移。
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.
我不知道这是否提供任何线索,但“无法...”文字显示为红色。
我尝试启用自动迁移(这是没有意义的,因为我尝试将挂起的模型更改写入基于代码的迁移)并导致数据库中所需的迁移。然而,这不是我想要的,因为我在项目中没有迁移。
我尝试删除数据库并重新创建数据库。重新创建数据库(直到上一次迁移)但是当我尝试使用Add-Migration时,我仍然会收到“无法更新..”错误。
修改的
我尝试了-force参数,但没有区别。
我的配置类的内容(我在上一次迁移后没有改变任何内容):
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(Bekosense.DAL.Context.BekosenseContext context)
{
context.Database.ExecuteSqlCommand(Properties.Resources.TriggerAlertMessageDrop);
context.Database.ExecuteSqlCommand(Properties.Resources.TriggerAlertMessageCreate);
context.Database.ExecuteSqlCommand(Properties.Resources.TriggerAlertMessageSentDrop);
context.Database.ExecuteSqlCommand(Properties.Resources.TriggerAlertMessageSentCreate);
context.Database.ExecuteSqlCommand(Properties.Resources.AddDbUsers);
}
编辑2 当我在DbContext中评论以下行时,我发现我能够进行添加迁移:
//Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
当我将该行置于活动状态并注释掉配置文件中的所有内容时,它仍然无效。 为什么Database.SetInitializer行会导致这种奇怪的行为?
答案 0 :(得分:22)
您可以重置实体框架以解决您的问题[但请记住它会将迁移带到默认状态]
注意:在执行以下操作之前进行备份
您需要删除当前状态:
您将在数据库中找到__MigrationHistory表[在App_Data文件夹下]
然后在程序包管理器控制台中运行以下命令:
Enable-Migrations -EnableAutomaticMigrations -Force
使用或不使用-EnableAutomaticMigrations
最后,你可以运行:
Add-Migration Initial
答案 1 :(得分:4)
永远不要使用automigrations,这在过去给我带来了问题(当迁移数据库时,使用正确的方法从头开始!)
这一行应该在你的global.asax:
中Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
而不是你的DbContext!
如果以上内容无效,请提供其他提示:
也许你的应用程序中有多个图层:
Add-Migration 000 -StartupProjectName "NameOfTheProjectInSolutionExplorer" -ConfigurationTypeName "MyConfiguration" -ConnectionString "theconnectionstring;" -ConnectionProviderName "System.Data.SqlClient" -Verbose
以上是我用于多层应用程序的Add-Migration命令。
更新数据库
也是如此Update-Database -ConfigurationTypeName "SlaveConfiguration" -StartupProjectName "FacturatieMVCv2.Data" -Verbose -script
答案 2 :(得分:4)
在我的情况下,我遇到了同样的错误,因为我在迁移过程中在构造函数方法上强制在类DbContext上使用ObjectContext.CommandTimeout。
尝试删除它
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 5000;
答案 3 :(得分:4)
这对我有用:
update-database -targetmigration:"0" -force -verbose
add-migration Initial
update-database