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

EF Core+SQLite迁移更新后出现__EFMigrationsHistory表不存在错误

解决SQLite Error 1: no such table: __EFMigrationsHistory

问题根源

这个错误说明EF Core用来追踪迁移记录的__EFMigrationsHistory表不存在,大概率是迁移未正确生成/应用,或是程序连接的数据库文件和迁移目标不一致。结合你的代码,可能的诱因包括:

  • 迁移文件未生成或未执行到数据库
  • 数据库文件路径配置存在歧义,导致程序连接了空数据库
  • 配置加载逻辑覆盖了默认的连接字符串配置

分步解决方法

1. 重新生成并应用迁移

打开终端进入项目根目录,执行以下命令:

# 生成初始迁移文件(如果还没生成过)
dotnet ef migrations add InitialCreate --context AlbumContext
# 将迁移应用到数据库
dotnet ef database update --context AlbumContext

如果你的AlbumContext不在启动项目中,需要加上--project参数指定DbContext所在的类库路径。

2. 固定数据库文件路径

你的连接字符串用的是相对路径Data Source=vinyltap.db,这种路径会根据程序运行时的工作目录变化,容易出现“迁移生成的db和程序连接的db不是同一个”的问题。可以修改为绝对路径,或者在Program.cs中明确指定路径:

// 在Program.cs的DbContext配置部分修改
var dbPath = Path.Combine(Directory.GetCurrentDirectory(), "vinyltap.db");
builder.Services.AddDbContext<AlbumContext>(options => {
    options.UseSqlite($"Data Source={dbPath}");
});

3. 修复配置加载逻辑

你在Program.cs中调用了builder.Configuration.Sources.Clear();,这会清除默认的配置源(包括appsettings.json),可能导致连接字符串读取失败。建议调整为追加自定义配置源,保留默认配置:

var builder = WebApplication.CreateBuilder(args);

// 移除Sources.Clear(),改为追加自定义配置源
builder.Configuration
    .AddUserSecrets(Assembly.GetEntryAssembly()!)
    .AddEnvironmentVariables()
    .AddDotEnvFile();

4. 优化DbContext构造函数

你的AlbumContext构造函数用了非泛型的DbContextOptions,建议改为泛型版本,避免配置注入时出现歧义:

public AlbumContext(DbContextOptions<AlbumContext> options) : base(options)
{
}

5. 可选:添加数据库初始化逻辑

如果是开发环境快速验证,可以在Program.cs中添加初始化代码(注意:用EnsureCreated会跳过迁移系统,后续无法切换到迁移模式):

var app = builder.Build();

// 添加数据库初始化逻辑
using (var scope = app.Services.CreateScope())
{
    var services = scope.ServiceProvider;
    var context = services.GetRequiredService<AlbumContext>();
    // 确保数据库及表创建完成
    context.Database.EnsureCreated();
    // 执行种子数据初始化
    DbInitializer.Initialize(context);
}

// 后续中间件配置...
app.UseHttpsRedirection();
// ...

验证流程

  1. 删除项目根目录下已有的vinyltap.db文件
  2. 重新执行迁移生成和应用命令
  3. 启动程序,检查vinyltap.db是否重新生成,且包含__EFMigrationsHistory表及其他业务表

内容的提问来源于stack exchange,提问作者JHookerDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:57:05