asp.net MongoDB事务无法正确回滚

1wnzp6jl  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(122)

我试图理解MongoDB的事务,所以我创建了这个方法来使用它:

public async Task<Item> InsertItem(Item item, string appId)
{ 
            var itemAppCollection = _divitiaeDatabase.GetCollection<Item>(appId);
                        
            await itemAppCollection.InsertOneAsync(item);

            return item;
}

public async Task TestyInsertItem(Item item, string appId)
{
            var sessionOptions = new ClientSessionOptions { CausalConsistency = true };
            using (var session = await _divitiaeClient.StartSessionAsync(sessionOptions))
            {
                session.StartTransaction();

                try
                {
                    await InsertItem(item, appId);

                    await InsertItem(item, appId);

                }
                catch (Exception ex)
                {
                    await session.AbortTransactionAsync();
                    throw;
                }
            }              
            
}

我基本上是通过两次插入相同的项目来强制错误。我想要的是,如果第二个InsertItem失败,第一个应该通过抛出AbortTransactionAsync来恢复。好吧,事情是这样的,错误发生了,AbortTransactionAsync被抛出,但是第一个插入根本没有被恢复,如果我检查数据库,我可以看到它仍然存储在那里。
我做错了什么?提前感谢您的帮助!

llew8vvj

llew8vvj1#

要使transaction工作,您应该将相应的session示例传递给所有期望transaction效果的操作(insert接受session作为输入参数)。

相关问题