EF6交易

时间:2015-11-17 18:04:31

标签: mysql sql-server entity-framework

我有一个场景,我总共有用户存款。 我正在尝试实现并发机制,以确保不会发生两个并发操作。

我本可以使用乐观并发,但似乎它不会在我的情况下完成工作。

在我的情况下,新的存款交易将取决于前一个,因此我将在数据库中进行一次读取和一次写入。

据我所知,我应该有这样的事情

     public DepositTransaction DepositAdd(int userId, decimal ammount)
    {
        using (var cx = this.Database.GetDbContext())
        {
            using (var trx = cx.Database.BeginTransaction(System.Data.IsolationLevel.RepeatableRead))
            {
                try
                {
                    //here the last deposit ammount is read and new created with same context
                    var transaction = this.DepositTransaction(userId, ammount, SharedLib.BalanceTransactionType.Deposit, cx);
                    trx.Commit();
                    return transaction;
                }
                catch
                {
                    trx.Rollback();
                    throw;
                }
            }                    
        }
    }

我生成了多个调用该函数的线程,但似乎它们无法获取上一次调用所提交的最后一个数据,也没有函数阻塞并等待前一个线程完成。

1 个答案:

答案 0 :(得分:0)

在深入了解SQL服务器的文档之后,我发现实现这一目标的正确隔离级别是Serializable。