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

.NET Core 3迁移至8后,EF创建的SQLite文件无法删除问题

解决.NET Core 8中删除EF创建的SQLite文件时的进程占用问题

针对你迁移后遇到的报错:

System.IO.IOException: The process cannot access the file 'c:\temp\tmp.db3' because it is being used by another process.

可尝试以下方案:

  • 强制DbContext与连接的完全释放
    避免零散的手动释放写法,改用using块自动管理生命周期,确保所有关联资源被及时回收:

    if(somethingIsNotAsIvePlanned)
    {
        // 确保所有DbContext实例通过using创建,或在此显式释放所有实例
        using (var tempContext = new YourDbContext())
        {
            // 执行必要业务操作
        }
    
        // 释放现有上下文并清空引用
        sqlite.Context?.Dispose();
        sqlite.Context = null;
    
        // 释放底层数据库连接
        var connection = db.Context.Database.GetDbConnection();
        connection?.Close();
        connection?.Dispose();
    
        // 触发GC并等待终结器完成资源回收
        GC.Collect();
        GC.WaitForPendingFinalizers();
    
        File.Delete(sqlLiteFilePath);
    }
    
  • 禁用SQLite连接池
    EF Core默认启用SQLite连接池,池内保留的连接可能持有文件句柄。在连接字符串中添加Pooling=false,确保连接使用后立即释放:

    Data Source=c:\temp\tmp.db3;Pooling=false;
    
  • 排查其他潜在占用
    检查代码中是否存在未释放的DbContext实例、后台任务、日志组件在访问该文件;也可通过Process Explorer工具定位具体占用进程,确认是否有外部程序持有文件句柄。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:34:54