Entity Framework SQLite执行数据库更新时__EFMigrationsHistory表不存在错误
解决EF Core SQLite迁移时“no such table: __EFMigrationsHistory”问题
我来帮你排查这个SQLite + EF Core的问题,看起来核心问题是数据库文件没有被正确创建,导致迁移历史表找不到。咱们一步步来解决:
1. 修复连接字符串配置错误
首先,我注意到你的appsettings.json里犯了一个很容易忽略的错误——ConnectionStrings节点被错误嵌套在Logging节点里面了!这会导致EF Core根本读取不到你的连接字符串,自然无法创建数据库文件。
修正后的appsettings.json应该是这样:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "ConnectionStrings": { "SqliteConnection": "Data Source=Todo.db" } }
2. 重新执行迁移流程
修正配置后,咱们重置迁移步骤:
- 先删除项目中自动生成的
Migrations文件夹(如果有的话) - 打开终端,切换到你的项目根目录,执行以下命令重新添加初始迁移:
dotnet ef migrations add InitialMigration - 最后执行数据库更新命令:
dotnet ef database update
3. 确认数据库文件位置
执行完上面的步骤后,你应该能在项目根目录找到Todo.db文件。如果还是看不到,可以尝试用绝对路径明确指定数据库位置,比如(根据你的实际项目路径调整):
"SqliteConnection": "Data Source=C:\\YourProjectPath\\ToDoAPI\\Todo.db"
(Windows系统路径用双反斜杠,Linux/macOS用正斜杠即可)
4. 额外排查点
- 确保你的
dotnet-ef工具版本(7.0.2)和安装的Microsoft.EntityFrameworkCore.Sqlite、Microsoft.EntityFrameworkCore.Design版本完全一致,版本不兼容也可能导致奇怪的问题。 - 如果还是无法创建数据库,可以在
AppDbContext的构造函数中临时添加一行代码强制创建数据库(测试用,生产环境建议移除):
运行一次项目后,再移除这行代码,重新执行迁移更新命令。public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { Database.EnsureCreated(); }
内容的提问来源于stack exchange,提问作者Ritchie B
相关产品推荐
相关产品推荐

