执行Update-Database报错SQLite Error 1: no such table: AspNetUsers如何解决
报错根因
你删除SQLite数据库后,库内所有表和EF Core迁移记录全部清空。项目中存在修改AspNetUsers表结构的迁移文件,这类迁移的默认逻辑是先创建临时表,从原AspNetUsers表迁移数据到临时表后替换原表,在原表不存在的场景下就会触发no such table: AspNetUsers报错。
解决方案
方案一:全量重建迁移(推荐开发环境使用)
- 删除项目
Migrations目录下的所有历史迁移文件 - 打开包管理器控制台(PMC)执行命令:
Add-Migration InitialCreate生成全新的全量初始化迁移 - 执行
Update-Database即可正常完成所有表的创建
方案二:按顺序执行迁移(适合需要保留历史迁移记录的场景)
- 先找到你项目中最早的、包含创建AspNetUsers表逻辑的迁移文件的名称,比如2023xxxxxx_InitialIdentity
- 执行命令指定运行到该初始迁移:
Update-Database 2023xxxxxx_InitialIdentity - 初始迁移执行完成后,AspNetUsers表已经创建,再直接执行
Update-Database运行后续所有迁移即可
方案三:临时跳过冲突逻辑(仅紧急测试使用)
- 找到当前触发报错的迁移文件,注释掉Up方法中涉及从AspNetUsers表读取数据的相关代码
- 执行
Update-Database完成迁移后,再恢复注释的代码即可,后续修改表结构的操作不会再触发该问题
注意事项
SQLite本身不支持部分ALTER TABLE操作,EF Core会默认通过「创建临时表-迁移原表数据-删除原表-重命名临时表为原表名」的逻辑实现表结构修改,该逻辑仅在原表存在的场景下可正常运行,删除空库后直接执行全量迁移必然会触发该类报错。
内容的提问来源于stack exchange,提问作者Blablabla
相关产品推荐
相关产品推荐

