ant*_*nce 7 c# transactions petapoco
使用PetaPoco,您可以进行事务管理,执行以下操作:
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();
}
Run Code Online (Sandbox Code Playgroud)
虽然这对于管理事务更新时的管理非常有用,但是对于控制事务的隔离级别来说,它有点缺乏类似于使用传统SQL连接的方式:
TransactionOptions transOptions = new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted };
using (new TransactionScope(TransactionScopeOption.Required, transOptions))
{
//here be transactions
}
Run Code Online (Sandbox Code Playgroud)
在PetaPoco中,GetTransaction返回一个新的Transaction,使用该特定的构造函数调用BeginTransaction.在这种情况下,BeginTransaction使用.NET的IDbConnection.BeginTransaction() - 它具有提供事务隔离级别的重载.据我所知,PetaPoco没有提供任何方法来为该方法提供隔离级别.有谁知道是否有可能实际修改PetaPoco的隔离级别而不必深入挖掘源并添加一个需要隔离级别的重载构造函数?我很高兴这样做并提交拉取请求,但我想确保在我完成工作之前,我不会错过任何简单明了的事情.
快速浏览了 PetaPoco 的源代码后,看起来您是完全正确的。源代码中似乎没有任何内容允许您修改事务级别,我也没有在网上找到任何文档来支持该行为。我得在路上寻找你的拉取请求!这会很有用的!
但是,作为另一种选择,您是否可以不在您传递的查询中显式设置事务隔离级别?
"SET TRANSACTION ISOLATION LEVEL READ COMMITTED SELECT * FROM tblNewObject WHERE Id = @0"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3733 次 |
| 最近记录: |