首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用transaction时数据库死锁

使用transaction时数据库死锁
EN

Stack Overflow用户
提问于 2018-02-01 05:12:54
回答 1查看 239关注 0票数 0
代码语言:javascript
复制
public async Task<T> Method1(){      
    using (var transaction = Conn.GetTransaction())
            {
                await Conn.DeleteMany<M1>().Where(x => (x.d == dId).ExecuteAsync();
                foreach (var l in listData)
                {
                    await Conn.InsertAsync(l);
                }
                transaction.Complete();
            }
    }


public async Task<T> callerMethod(){
   var res = await serivce.Method1();
}

for(int i = 0; i <25; i++){
    callerMethod();
}

当我通过web api调用它时,通过一个循环调用它> 25次。一些记录被插入,一些记录收到“死锁”消息。

当我删除"using(transaction)“块时,它工作得很好。但是,我认为我们需要“使用(事务)块”。

EN

回答 1

Stack Overflow用户

发布于 2018-02-01 05:26:51

您的问题是对数据库的混合访问,有时是通过事务访问,有时是在事务外部访问。这会导致锁定问题-锁定在事务内部的资源不能从事务外部再次锁定。这就是僵局。

既然你想要一个事务,我会切换到一个TransactionScope,它应该在异步调用之间进行。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48551529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档