SQLite 在尝试从数据库读取时出现“尝试写入只读数据库错误”

问题描述 投票:0回答:1

我正在使用 Entity Framework 6(非 Core)和 System.Data.SQLite。

我使用

ReadOnly=True
显式连接到数据库,因为我只是打开它来读取它。

数据库已存在并已填充数据。当我在其中一组上调用

.FindAsync
时,出现此错误。如果我使用
ReadOnly=False
连接到数据库,相同的调用可以正常工作。

我最好的猜测是查询默认以某种方式修改数据库,可能会更新一些元数据,但我不知道如何进一步调查以确认这一点。

导致错误的原因是什么?有没有办法阻止它,而不用

ReadOnly=false
连接数据库?

c# .net sqlite entity-framework-6 system.data.sqlite
1个回答
0
投票

我仍然不知道确切的原因,但事实证明我的自定义数据库初始值设定项运行了两次:第一次实例化 DbContext(具有写入权限)时运行一次,然后 再次第二次实例化 DbContext(以读权限)仅模式...)。

初始化程序是幂等的,因此一旦数据库已经存在并且是最新的,它就不会执行任何操作,但它总是使用

ExecuteSqlCommand
调用
TransactionalBehavior.EnsureTransaction
,它会尝试启动事务,而当数据库存在时,该事务无法完成。只读。

知道这一点,解决问题就很容易了。

© www.soinside.com 2019 - 2024. All rights reserved.