我有一个应该在Linux上使用Mono和PostgreSQL的项目。在我的项目中,我编写了以下代码:
var opt = new TransactionOptions();
opt.IsolationLevel = IsolationLevel.ReadCommitted;
opt.Timeout = TimeSpan.FromSeconds(300);
using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required, opt))
{
using (TContext context = Resolve())
{
context.Database.Connection.Open();
context.Database.Connection.EnlistTransaction(Transaction.Current);
// Some actions
context.SaveChanges();
}
tx.Complete();
}
当我在Windows上的PostgreSQL日志中运行此代码时,我看到每个事务都是以ReadCommited隔离级别执行的。
但是当我在Mono上使用相同的数据库在linux上执行完全相同的代码时,它向我显示隔离级别是Serializable。
我怀疑mono使用transactionScope有一些问题。
为什么这是一个问题?我运行了以下测试。我启动了代码,它同时在3台不同的机器上更改了50 000个用户的姓氏。当我在Windows上运行测试时它工作正常。但是在Linux上 - 没有。错误显示"更新条目时发生错误。由于事务之间的读/写依赖性而无法序列化访问"。