我有一个实体框架6代码优先项目。我删除了我的数据库,想要从头开始重新创建它。当我运行update-database时,某些迁移不会运行。由于数据库未处于预期状态,因此稍后会导致错误。
这是第一次跳过的迁移:
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表。
使用 update-datebase -verbose ,它会显示“正在应用显式迁移:”并列出迁移,并且该列表中缺少这些迁移。
我已经确认这些也在项目文件中。 update-database在哪里获取迁移列表? 为什么有些人会被跳过?
答案 0 :(得分:0)
在这种情况下,最好的办法是创建所有迁移的幂等脚本,并查看实体框架尝试执行的操作:
update-database –SourceMigration $InitialDatabase -Script
这应该包含创建数据库,__ MobileHistory表以及连续应用迁移所需的所有内容。
如果您关心的所有其他数据库都是最新的,则只需重置迁移即可。另一种选择是将初始化程序切换为createdatabaseifnotexists ,这将根据您的模型创建一个新数据库。
答案 1 :(得分:0)
每个实体框架迁移包含三个文件
.cs
和其他代码隐藏文件
.Designer.cs
.resx
确保<timestamp>_dd_ConversationEntry_Type.Designer.cs
文件不丢失并包含在您的项目中。