MongoDB 事务未正确回滚

问题描述 投票:0回答:1

我试图了解 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 来恢复第一个 InsertItem。好吧,问题是发生了错误并抛出了 AbortTransactionAsync,但是第一次插入根本没有恢复,如果我检查数据库,我可以看到它仍然存储在那里。

我在这里做错了什么?预先感谢您的帮助!

asp.net .net mongodb mongodb-.net-driver
1个回答
0
投票

要使交易生效,您应该将相应的会话传递给您期望交易生效的所有操作。

© www.soinside.com 2019 - 2024. All rights reserved.