C#学习教程:PetaPoco – 设置事务隔离级别分享


PetaPoco – 设置事务隔离级别

使用PetaPoco,您可以进行事务管理,执行以下操作:

var newObject = new NewObject(); var newObjectId = 1; using (var scope = db.GetTransaction()) { newObject = db.SingleOrDefault("SELECT * FROM tblNewObject WHERE Id = @0", newObjectId); scope.Complete(); } 

虽然这对于管理事务更新时的管理非常有用,但是控制事务的隔离级别与使用传统SQL连接执行此操作的方式类似:

 TransactionOptions transOptions = new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted }; using (new TransactionScope(TransactionScopeOption.Required, transOptions)) { //here be transactions } 

在PetaPoco中, GetTransaction返回一个新的Transaction,使用该特定的构造函数调用BeginTransaction 。 在这种情况下,BeginTransaction使用.NET的IDbConnection.BeginTransaction() – 它具有提供事务隔离级别的重载。 据我所知,PetaPoco没有提供任何方法来为该方法提供隔离级别。 有没有人知道是否可以实际修改PetaPoco的隔离级别而不必深入挖掘源并添加一个需要隔离级别的重载构造函数? 我很乐意这样做并提交拉取请求,但我想确保在我完成工作之前,我不会错过任何简单明了的事情。

快速浏览一下PetaPoco的源代码,看起来你是绝对正确的。 它看起来不像源中有任何东西允许您修改事务级别,也没有在线找到任何文档来支持该行为。 我将不得不寻找你的拉动请求! 这将非常有用!

但是,作为另一种选择,您是否可以在传递的查询中明确设置事务隔离级别?

 "SET TRANSACTION ISOLATION LEVEL READ COMMITTED SELECT * FROM tblNewObject WHERE Id = @0" 

使用最新版本的PetaPoco,您现在可以设置隔离级别。

使用流畅的配置

 var db = config.Build() .UsingConnectionString("cs") .UsingProvider() .UsingIsolationLevel(IsolationLevel.Chaos) .Create(); db.IsolationLevel.ShouldBe(IsolationLevel.Chaos); 

或传统的构造函数

 var db = new Database("MyConnectionStringName") { IsolationLevel = IsolationLevel.Chaos }; 

或者在我的情况下,我想避免锁定,而且我不会讨论脏读,我会使用:

 SELECT * FROM tblNewObject with(nolock) WHERE Id = @0 

根据PetaPoco的说法,它仍然可以缩短为:

 FROM tblNewObject with(nolock) WHERE Id = @0 

这样做的好处是只选择和映射DTO中存在的列。

上述就是C#学习教程:PetaPoco – 设置事务隔离级别分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959869.html

发表评论

邮箱地址不会被公开。 必填项已用*标注