无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移

时间:2017-04-01 11:48:30

标签: asp.net-mvc entity-framework ef-code-first migration ef-migrations

对于我的生活,我无法摆脱这个错误信息。我几乎尝试了所有我能做的事。

MyDBContext.cs

        public MyDBContext() : base("ConnStr_Dev")
    {

    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, DbMigrationsConfiguration<MyDBContext>>());
        //Database.SetInitializer<MyDBContext>(null);
        base.OnModelCreating(modelBuilder);
    }

GenericRepository.cs

        public void Insert(T obj)
    {
        table.Add(obj);      //this is where it throws the error, inserting first time.
    }

以不同的组合尝试所有这些

启用 - 迁移-EnableAutomaticMigrations -Force

添加迁移初始-IgnoreChanges

更新的数据库的

我尝试删除迁移表,删除整个数据库,一切。

任何移民专家都可以吗?

编辑:DAL包含GenericRepository和上下文类。

5 个答案:

答案 0 :(得分:3)

我也遇到了这个错误。我添加了迁移,然后做了我认为是微不足道的改变。

此属性:迁移中的IMigrationMetadata.Target不是随机的。它是根据迁移完成时模型的状态计算的。 (这可能过于简单了。)

因此,如果您进行其他更改,则看起来还有其他待处理的更改需要进行其他迁移。

就我而言,由于更改尚未提交给源代码管理,因此修复方法是删除并重新添加迁移。需要一段时间来找出原因,因为错误信息不清楚,除非您已经知道是什么导致了它。但我所学到的教训(对EF来说相对较新)是对模型的更改需要新的迁移或重新进行我正在进行的迁移。

答案 1 :(得分:2)

  1. 从解决方案中删除Migrations文件夹
  2. 从数据库中删除dbo.__MigrationHistory
  3. 打开Package Manager ConsoleEnable-Migrations
  4. 添加您的初始迁移Add-Migration Initial
  5. Update-Database
  6. 完成

答案 2 :(得分:1)

您只需对一个或多个实体类进行更改。无论是添加新属性,更改了特定属性的数据类型,还是只添加了新的实体类,在所有这些情况下,您确实需要添加新的迁移。

看到您已经尝试过,请确保在Package Manager控制台中执行Add-Migration命令时选择了包含DBContext类的项目配置类和迁移文件夹。此外,您将特定的连接字符串传递给 MyDBContext 类的基类(DbContext)。确保您还要升级和更新正确的数据库。

知道您可以对特定数据库执行Add-Migration命令和Update命令:

示例摘录:

Add-Migration AddProperty1 -ConnectionString "Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabaseCatablog;Connect Timeout=30;User ID=MyUser;Password=mypassword12345" -ConnectionProviderName "System.Data.SqlClient" -Verbose

Update-Database -ConnectionString "Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabaseCatablog;Connect Timeout=30;User ID=MyUser;Password=mypassword12345" -ConnectionProviderName "System.Data.SqlClient" -Verbose

希望这有帮助。

答案 3 :(得分:0)

在我的情况下,通过添加DatabaseInitializerForType ... appSetting来解决错误。

<appSettings>
<add key="DatabaseInitializerForType EasyEntity.EasyContext, EasyEntity"  value="EasyEntity.EasyInitializer, EasyEntity" />

答案 4 :(得分:0)

这个错误在我的情况下很奇怪,我忘了取消注意CONNECTIONSTRING设置,意味着有一个正确的连接字符串解决了这个错误。希望能帮助到你!