0

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

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

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

Enable-Migrations -ProjectName 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() 命令是如何做到这一点的。

4

1 回答 1

0

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

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

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

希望这可以帮助。

于 2015-01-28T13:23:57.093 回答