EF7指定目标迁移仍执行初始迁移,SQLite报错如何解决?
解决方法
步骤1:检查迁移历史表
打开你的SQLite数据库文件(可使用DB Browser for SQLite等工具),确认是否存在__EFMigrationsHistory表。如果该表不存在,或者表中缺少20230228105846_InitialMigration这条记录,说明EF无法追踪到初始迁移已执行,这就是问题根源。
步骤2:手动添加迁移历史记录
如果__EFMigrationsHistory表存在但缺少初始迁移记录,执行以下SQL语句插入记录:
INSERT INTO __EFMigrationsHistory (MigrationId, ProductVersion) VALUES ('20230228105846_InitialMigration', '7.0.0');
注意:ProductVersion需替换为你实际使用的EF7版本号(比如7.0.12),可从错误栈的EF相关程序集版本信息中获取。
如果__EFMigrationsHistory表不存在,先执行创建表的语句:
CREATE TABLE __EFMigrationsHistory ( MigrationId TEXT NOT NULL PRIMARY KEY, ProductVersion TEXT NOT NULL );
再执行上述插入语句。
步骤3:重新执行目标迁移
完成历史记录添加后,再次运行命令:
Update-Database -Migration BookCoverFieldUpdate -StartUpProject Infrastructure
此时EF会识别初始迁移已执行,直接应用BookCoverFieldUpdate迁移。
备选方案:创建基线迁移
若上述方法无效,且数据库结构已与初始迁移完全一致,可创建基线迁移匹配当前状态:
- 确保数据库已包含初始迁移的所有表结构
- 运行命令创建空的初始迁移:
Add-Migration InitialMigration -IgnoreChanges -StartUpProject Infrastructure
- 执行更新命令让EF记录该迁移已应用:
Update-Database -StartUpProject Infrastructure
之后再尝试应用BookCoverFieldUpdate迁移。
额外注意事项
- 确认
DbContext的连接字符串指向正确的SQLite数据库文件 - 若解决方案中有多个
DbContext,需在命令中添加-Context参数指定对应上下文类,示例:
Update-Database -Migration BookCoverFieldUpdate -StartUpProject Infrastructure -Context YourDbContextName
内容的提问来源于stack exchange,提问作者JackFord
相关产品推荐
相关产品推荐

