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

如何在EF Core中以只读模式打开Windows下的SQLite数据库?

解决SQLite只读模式打开Program Files目录数据库失败的问题

问题场景:Windows平台下,SQLite数据库位于受系统保护的Program Files目录,已在连接字符串中添加Mode=ReadOnly,但仍抛出unable to open database file异常。

问题原因

即使开启只读模式,SQLite默认仍会尝试在数据库所在目录创建临时文件(如写-ahead日志、临时索引文件),而Program Files目录无写入权限,导致操作失败。

解决方案

方案1:使用内存缓存避免创建临时文件

在连接字符串中添加Cache=Private,让SQLite将临时数据存储在内存中,无需在磁盘创建文件:

string connectionStr = @"Data Source=C:\Program Files\my.db;Mode=ReadOnly;Cache=Private";
Action<DbContextOptionsBuilder> configurePrescriptionDbContext = o => o.UseSqlite(connectionStr);

方案2:指定临时文件到有权限的目录

将临时文件目录设置为系统临时目录(用户默认有权限),添加TempDirectory参数:

string tempDir = Path.GetTempPath();
string connectionStr = $"Data Source=C:\\Program Files\\my.db;Mode=ReadOnly;TempDirectory={tempDir}";
Action<DbContextOptionsBuilder> configurePrescriptionDbContext = o => o.UseSqlite(connectionStr);

额外注意

务必使用完整绝对路径指定数据库文件,避免相对路径解析错误导致的权限问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:32:38