EF 6代码优先迁移已跳过

时间:2016-08-03 15:15:47

标签: entity-framework-6 ef-migrations

我有一个实体框架6代码优先项目。我删除了我的数据库,想要从头开始重新创建它。当我运行update-database时,某些迁移不会运行。由于数据库未处于预期状态,因此稍后会导致错误。

这是第一次跳过的迁移:

using System.Data.Entity.Migrations;

public partial class add_ConversationEntry_Type : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.ConversationEntry", "Type", c => c.String(nullable: false));
    }

    public override void Down()
    {
        DropColumn("dbo.ConversationEntry", "Type");
    }
} 

看起来很标准。它继承自DbMigration并没有什么奇怪的。接下来的3个也被跳过,它们都会影响dbo.ConversationEntry表。

使用 update-datebase -verbose ,它会显示“正在应用显式迁移:”并列出迁移,并且该列表中缺少这些迁移。

我已经确认这些也在项目文件中。 update-database在哪里获取迁移列表? 为什么有些人会被跳过?

2 个答案:

答案 0 :(得分:0)

在这种情况下,最好的办法是创建所有迁移的幂等脚本,并查看实体框架尝试执行的操作:

update-database –SourceMigration $InitialDatabase -Script

这应该包含创建数据库,__ MobileHistory表以及连续应用迁移所需的所有内容。

如果您关心的所有其他数据库都是最新的,则只需重置迁移即可。另一种选择是将初始化程序切换为createdatabaseifnotexists ,这将根据您的模型创建一个新数据库。

答案 1 :(得分:0)

每个实体框架迁移包含三个文件

  • entity class .cs

和其他代码隐藏文件

  • 元数据文件.Designer.cs
  • 数据库模型快照.resx

确保<timestamp>_dd_ConversationEntry_Type.Designer.cs文件不丢失并包含在您的项目中。