首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PetaPoco -设置事务隔离级别

PetaPoco -设置事务隔离级别
EN

Stack Overflow用户
提问于 2013-11-08 15:32:38
回答 3查看 4.6K关注 0票数 8

使用PetaPoco,您可以执行事务管理这样的操作:

代码语言:javascript
复制
var newObject = new NewObject();
var newObjectId = 1;
using (var scope = db.GetTransaction())
{
    newObject = db.SingleOrDefault<NewObject>("SELECT * FROM tblNewObject WHERE Id = @0", newObjectId);
    scope.Complete();
}

虽然这对于在事务更新提交时进行管理是很好的,但对于控制事务的隔离级别来说,这有点不足,就像您使用传统的SQL连接那样:

代码语言:javascript
复制
TransactionOptions transOptions = new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted };
using (new TransactionScope(TransactionScopeOption.Required, transOptions))
{
    //here be transactions
}

在PetaPoco中,GetTransaction返回一个新事务,该事务使用该特定构造函数调用BeginTransaction。在这种情况下,BeginTransaction使用.NET的IDbConnection.BeginTransaction() -它具有重载以提供事务隔离级别。据我所知,PetaPoco没有为该方法提供任何隔离级别。是否有人知道是否有可能修改PetaPoco的隔离级别,而不必深入源代码并添加一个重载的构造函数来接受隔离级别?我很乐意这样做,并提交一个拉请求,但我想确定在我做工作之前,我没有遗漏一些直接的东西。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-08 15:52:05

快速查看了PetaPoco的源代码后,看起来您是绝对正确的。在源代码中似乎没有允许您修改事务级别的任何内容,我也没有在网上找到任何支持该行为的文档。我得在路上找你的拉力请求!这会很有用的!

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

代码语言:javascript
复制
"SET TRANSACTION ISOLATION LEVEL READ COMMITTED SELECT * FROM tblNewObject WHERE Id = @0"
票数 3
EN

Stack Overflow用户

发布于 2016-01-20 23:06:20

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

使用fluent配置

代码语言:javascript
复制
var db = config.Build()
         .UsingConnectionString("cs")
         .UsingProvider<SqlServerDatabaseProvider>()
         .UsingIsolationLevel(IsolationLevel.Chaos)
         .Create();

 db.IsolationLevel.ShouldBe(IsolationLevel.Chaos);

或传统构造函数

代码语言:javascript
复制
var db = new Database("MyConnectionStringName") { IsolationLevel = IsolationLevel.Chaos };
票数 3
EN

Stack Overflow用户

发布于 2015-06-29 00:10:32

或者在我的例子中,如果我想避免锁定,而且我不太在意脏读,我会使用:

代码语言:javascript
复制
SELECT * FROM tblNewObject with(nolock) WHERE Id = @0

在PetaPoco术语中,仍然可以将其缩短为:

代码语言:javascript
复制
FROM tblNewObject with(nolock) WHERE Id = @0

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19862748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档