我正在使用 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() 命令是如何做到这一点的。