25

我不知何故让我的 EF5 项目进入了我无法继续的状态。

当我执行“更新数据库”时,我得到:

无法更新数据库以匹配当前模型,因为存在待处理的更改并且自动迁移已禁用。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将 DbMigrationsConfiguration.AutomaticMigrationsEnabled 设置为 true 以启用自动迁移。您可以使用 Add-Migration 命令将挂起的模型更改写入基于代码的迁移。

好的,很好,所以我尝试“添加迁移”,我得到:

无法生成显式迁移,因为以下显式迁移处于挂起状态:[ ]。在尝试生成新的显式迁移之前应用挂起的显式迁移。

20 转到 10 ??

我现在该怎么办?(除了切换到 NHibernate?)

4

7 回答 7

7

对我有用的是:

  1. 将我的所有更改(首先进行备份)恢复到已知的良好状态。
  2. add-migration DummyMigration。这产生了一些我评论过的虚假变化
  3. 调用update-database以将迁移 + 元数据添加到[__MigrationHistory]表中。
  4. 进行我需要的更改(从我之前获取的代码的备份中)。
  5. 做正常的add-migration/ update-database

不理想,如果有更好的解决方案会很酷,但这对我有用。

于 2013-07-22T21:46:33.277 回答
2

对我来说,问题是我们重命名了迁移 2014123456_Initial.cs 的命名空间。
但是 VS 并没有在其关联的 2014123456_Initial.Designer.cs 中重新生成命名空间。

一旦将 Designer.cs 更改为使用相同的命名空间,它就会重新开始工作。


(也将其作为答案发布在这里,因为这两个问题非常相似)

于 2014-01-10T17:51:07.257 回答
1

我将Configuration.cs班级中的以下值从false更改为true

AutomaticMigrationsEnabled = true; 

App_Data文件夹中,我重命名了项目的数据库 - 以.mdf结尾的文件(因此将创建一个新的),并在包管理器控制台中输入以下命令:

更新数据库

之后,待定迁移顺利进行。

请注意,这对我有用,但如果这是最佳做法,我不是 100%。无论如何,此迁移的实体框架代码优先指南说:

“如果您收到指示表已存在且无法创建的错误,这可能是因为您在删除数据库之后和执行 update-database 之前运行了应用程序。在这种情况下,请删除 Movies.mdf 文件再次重试 update-database 命令。如果仍然出现错误,请删除迁移文件夹.."

同样关于AutomaticMigrationsEnabled = true;这篇MSDN 文章,数据点:代码优先迁移之谜:已解决告诉“迁移可以自动运行,这意味着将发现模型更改,并且将在数据库上创建和执行与更改相对应的迁移。所有这些都发生在运行时"

于 2016-10-18T11:43:23.497 回答
0

我在创建数据库时犯了错误

    using System.ComponentModel.DataAnnotations;
    using System.Globalization;
    namespace ProductsManager.Models
    {
        public class Product
        {
            public int ProductId { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
            public string Production { get; set; }
            public string Size { get; set; }
            public decimal<--- Price { get; set; }
            public string Barcode { get; set; }
        }
    }

在添加迁移初始后,我意识到并将代码更改为 public int Price { get; 放; 做了相同的添加迁移 DummyMigration 并在迁移文件夹 080372472_dummyMigration 中创建

namespace IdetityBeta.Migrations
{
    using System;
    using System.Data.Entity.Migrations;

    public partial class DummyMigration : DbMigration
    {
        public override void Up()
        {
            AlterColumn("dbo.Products", "Price", c => c.String());
        }

        public override void Down()
        {
            AlterColumn("dbo.Products", "Price", c => c.Decimal(nullable:             false, precision:              18, scale: 2));
        }
    }
}

那么更新数据库和问题就解决了

于 2014-12-15T14:40:12.013 回答
0

我解决了这个问题

  • 运行“更新-数据库-脚本-强制”
    • 请注意在错误“无法更新数据库...”之前尝试的最后一次显式迁移
  • 使用上次尝试记录的上次迁移运行“Update-Database -Script -TargetMigration [lastmigration]”

然后我可以在脚本中运行并添加一个新的迁移。这是在 EF6 和 Nuget 2.8 上 - 发布问题时它可能不起作用。

于 2015-09-23T12:04:53.287 回答
0

当您尝试与与您的迁移具有相同基础的迁移合并时,可能会发生这种情况,因为即使该表存在,其中一个迁移模式也存在模型差异

要解决此问题,您可以做的是通过命令创建合并迁移

添加迁移-IgnoreChanges

后跟迁移名称

这会创建一个以当前模型作为快照的空迁移。因此,这将解决您的模型差异问题,并且您的表和模型将同步

于 2019-03-29T10:48:48.620 回答
0
  1. Update-Database –TargetMigration <second_last_migration>
  2. Add-Migration <full_name_including_timestamp_of_last_migration>

    您需要包含时间戳,以便迁移知道您想要编辑现有迁移而不是构建新迁移。这将更新上次迁移的元数据以匹配当前模型。

  3. Update-Database

来源https://docs.microsoft.com/en-gb/ef/ef6/modeling/code-first/migrations/teams#resolving-the-merge-conflict

于 2018-10-25T12:02:46.060 回答