【问题标题】:EF 6 code-first migrations skipped跳过了 EF 6 代码优先迁移
【发布时间】:2016-08-03 15:15:47
【问题描述】:

我有一个实体框架 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 从哪里获取迁移列表? 为什么有些会被跳过?

【问题讨论】:

  • 你有没有想过这个问题?我们的第一次迁移也被跳过了......

标签: entity-framework-6 entity-framework-migrations


【解决方案1】:

在这种情况下最好的做法是为所有迁移创建一个幂等脚本,并查看 Entity Framework 试图做什么:

update-database –SourceMigration $InitialDatabase -Script

这应该包含创建数据库、__MigrationHistory 表和连续应用迁移所需的一切。

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

【讨论】:

    【解决方案2】:

    每个实体框架迁移由三个文件组成

    • 实体类.cs

    和其他代码隐藏文件

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

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

    【讨论】:

    • 这不能回答问题
    【解决方案3】:

    简单易懂

    确保构建操作是“编译”并且不要忘记将此答案标记为“正确答案”。

    enter image description here

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2016-05-26
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多