重置EF代码优先迁移状态

时间:2013-10-04 14:15:43

标签: entity-framework ef-code-first entity-framework-5 ef-migrations

我正在使用EF 5.我们希望将项目转换为使用代码优先迁移。

最初在我们的DBContext文件中,我们有一个IDataBaseInitializer实现,如果它不存在,则创建数据库(使用context.Database.Create)。

我想测试迁移概念,所以我最初运行命令:

启用 - 迁移 - 项目名称MyProjectName (这已成功创建了包含Configuration.cs文件的Migrations文件夹)

Add-Migration Initial -ProjectName MyProjectName (这成功创建了一个匹配我的模型类的脚本文件)

此时我想尝试测试升级方案,因此我在模型上创建了一个tmp字段,并重新启动了Add-Migration命令,该命令似乎按预期工作。

然而此时我想重置我的状态。我已经恢复了VS中的所有更改,从磁盘中删除了Migrations文件夹中的文件,尝试从我的数据库中删除__MigrationsHistory表(并且还完全删除了数据库)。无论我做什么,我都无法获得新的Add-Migration来创建包含我的初始状态的脚本。它总是显示为......这是我最初创建的测试值。

public partial class Initial : DbMigration
{
    public override void Up()
    {
       DropColumn("dbo.EventTrackingRecords", "TestValue");
    }

    public override void Down()
    {
        AddColumn("dbo.EventTrackingRecords", "TestValue", c => c.String());
    }
}

我不明白它保存这些初始信息的位置。我发现唯一有趣的事情是,如果我在删除数据库后运行我的程序,它会根据模型重新创建我的数据库,但它也会创建一个__MigrationHistory表!我不明白context.Database.Create()命令是如何做到的。

1 个答案:

答案 0 :(得分:0)

EF会创建__MigrationHistory表以使您的数据库保持最新状态,并警告您不是。

在模型中编辑某些内容并运行add-migration时,必须运行update-database才能创建新的迁移。 EF不会允许您在创建新迁移时进行暂挂迁移。

因此,如果您向其中一个模型添加属性,然后创建迁移,则必须在创建删除属性的新迁移之前更新数据库。

希望这有帮助。