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



我,为了我的生活,无法摆脱这个错误消息。我几乎尝试了我能尝试的一切。

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);
    }

通用存储库.cs

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

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

启用

迁移 -启用自动迁移 -强制

添加迁移初始 - 忽略更改

更新数据库

我尝试删除迁移表,删除整个数据库,所有内容。

请问任何迁移专家吗?

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

我也与这个错误作斗争。我添加了迁移,然后进行了我认为微不足道的更改。

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

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

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

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

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

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

知道您可以对特定数据库执行"添加迁移"命令和"更新"命令:

示例代码段:

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

希望这有帮助。

在我的情况下,错误是通过添加数据库初始化器类型来解决的...应用设置。

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

这个错误在我的情况下已经足够奇怪了,我忘了取消注释 CONNECTIONSTRING 设置,这意味着有一个正确的连接字符串解决了这个错误。希望对您有所帮助!