2016-08-03 168 views
0

我有一个实体框架6代码优先项目。我删除了我的数据库,并希望从头开始重新创建它。当我运行update-database时,一些迁移​​无法运行。之后会导致错误,因为数据库未处于预期状态。EF 6代码优先迁移跳过

这是跳过第一迁移:

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表。

With update-datebase -verbose它显示'应用显式迁移:'并列出了迁移,并且列表中缺少这些迁移。

我已经验证这些也在项目文件中。 update-database在哪里获取迁移列表? 为什么有些人会被跳过?

回答

0

在这种情况下做的最好的事情是创建所有迁移的幂等脚本,看看实体框架正在试图做的事:

update-database –SourceMigration $InitialDatabase -Script 

这应该创建数据库所需的一切时, __MigrationHistory表并连续应用您的迁移。

如果您关心的所有其他数据库都是最新的,则只需重置迁移即可。还有一种选择是将初始化程序切换到createdatabaseifnotexists,这将根据您的模型创建一个新的数据库。

0

每个实体框架迁移包括从三个文件

  • 实体类.cs

和额外的代码隐藏文件

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

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

相关问题