我有一个场景,其中我有一个运行的总用户存款。我正在尝试实现并发机制,以确保不会发生两个并发操作。
我可以使用乐观并发,但它似乎不能在我的情况下完成工作。
在我的例子中,一个新的存款事务将依赖于前一个事务,所以我将在数据库中有一个读和一个写。
据我所知,我应该做这样的事情
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;
}
}
}
}我产生了调用函数的多个线程,但它们似乎无法获得前一个调用提交的最后一个数据,函数也没有阻塞并等待前一个线程完成。
发布于 2015-11-23 16:38:14
在深入研究SQL server的文档之后,我发现实现这一目标的正确隔离级别是可序列化的。
https://stackoverflow.com/questions/33763958
复制相似问题