gpt4 book ai didi

c# - 将TransactionScope隔离级别更改为内存DB中的快照

转载 作者:行者123 更新时间:2023-12-03 18:45:40 25 4
gpt4 key购买 nike

我正在使用基于内存的数据库(使用ServiceStack.OrmLite.Sqlite.Windows)在基于Servicestack的Web API中进行单元测试。我正在尝试测试的方法如下。

public object Get(object request)
{
using (var db = HostContext.Resolve<IDbConnectionFactory>().OpenDbConnection("ConnectionString"))
{
using (var dbtran = db.OpenTransaction(IsolationLevel.Snapshot))
{
// reading operation from DB
return response;
}
}
}


当我尝试使用InmemoryDB连接测试此方法时,由于IsolationLevel而导致出现以下异常。


类型“ System.ArgumentException”的异常发生在
System.Data.SQLite.dll,但未在用户代码中处理


在创建inmemoryDB时,我尝试将隔离级别设置为快照,如下所示:

var isolationlevel = IsolationLevel.Snapshot;
db.OpenTransaction().IsolationLevel.Add(isolationlevel);


即使执行此操作后,事务级别也显示为“可序列化”,并获得相同的异常。

还有其他方法可以将inmemoryDB中的“事务隔离级别”设置为“快照”吗?

最佳答案

Sqlite不支持创建IsolationLevel.Snapshot事务,但是SQLite's Isolation and Concurrency文档指示,通过运行“ PRAGMA journal_mode = WAL”启用Write Ahead Logging(WAL)模式时,SQLite会显示“快照隔离”,您可以在OrmLite中使用以下命令进行设置:

db.ExecuteSql("PRAGMA journal_mode=WAL");

关于c# - 将TransactionScope隔离级别更改为内存DB中的快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37878662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com