gpt4 book ai didi

c# - EntityFramework 中的 TransactionScope TransactionInDoubtException

转载 作者:行者123 更新时间:2023-11-30 15:27:51 24 4
gpt4 key购买 nike

以下代码是我的业务层的一部分:

   public void IncrementHits(int ID)
{
using (var context = new MyEntities())
{
using (TransactionScope transaction = new TransactionScope())
{
Models.User userItem = context.User.First(x => x.IDUser == ID);
userItem.Hits++;
try
{
context.SaveChanges();
transaction.Complete();
}
catch (Exception ex)
{
transaction.Dispose();
throw;
}

}
}
}

有时(每周一次或两次)我收到 TransactionInDoubtException。堆栈跟踪:

at System.Transactions.TransactionStateInDoubt.EndCommit(InternalTransaction tx) 
at System.Transactions.CommittableTransaction.Commit()
at System.Transactions.TransactionScope.InternalDispose()
at System.Transactions.TransactionScope.Dispose()

据我所知,默认的隔离级别是serializable,所以这个原子操作应该没有问题。 (假设没有因为写锁而发生超时)

我该如何解决我的问题?

最佳答案

使用transaction.Rollback代替transaction.Dispose

如果您有一个处于挂起状态的事务,总是在出现异常时回滚。

关于c# - EntityFramework 中的 TransactionScope TransactionInDoubtException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26829566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com