You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:35:42