使用 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();
}
虽然这对于管理何时提交事务更新非常有用,但在控制事务的隔离级别方面有点欠缺,类似于使用传统 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 的隔离级别,而不必深入研究源代码并添加一个采用隔离级别的重载构造函数?我很高兴这样做并提交一个拉取请求,但我想在我做这项工作之前确保我没有遗漏一些简单的东西。