我正在使用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()命令是如何做到的。
答案 0 :(得分:0)
EF会创建__MigrationHistory表以使您的数据库保持最新状态,并警告您不是。
在模型中编辑某些内容并运行add-migration时,必须运行update-database才能创建新的迁移。 EF不会允许您在创建新迁移时进行暂挂迁移。
因此,如果您向其中一个模型添加属性,然后创建迁移,则必须在创建删除属性的新迁移之前更新数据库。
希望这有帮助。