在Linux

时间:2017-06-29 11:05:37

标签: c# linux postgresql mono

我有一个应该在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上 - 没有。错误显示"更新条目时发生错误。由于事务之间的读/写依赖性而无法序列化访问"。

0 个答案:

没有答案