如何在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
相关产品推荐
相关产品推荐

