【问题标题】:System.NotSupportedException with MongoDb C# TransactionsSystem.NotSupportedException 与 MongoDb C# 事务
【发布时间】:2021-07-14 12:40:35
【问题描述】:

我正在尝试将数据从一个集合移动到另一个集合。因此,我将 RequestProcess 对象添加到 completedRequestsCollection 并将其从正在进行的RequestsCollection 中删除。使用事务来执行此操作是有意义的,以便在任一操作出现问题时都可以回滚。

我找到了这个Mongo Db How-to Guide 并尝试关注它,请参见下面的代码:

//connect to db and get collections
var mongoClient = new MongoClient(connectionString);
var mongoDb = mongoClient.GetDatabase(databaseName);
var ongoingRequestsCollection = mongoDb.GetCollection<RequestProcess>(ongoingRequestsCollectionName);
var completedRequestsCollection = mongoDb.GetCollection<RequestProcess>(completedRequestsCollectionName);

//create session
using var session = mongoClient.StartSession();

//start the transaction
session.StartTransaction();
try
{
    //add to completed requests collection
    await completedRequestsCollection.InsertOneAsync(requestObject);

    //delete from ongoing requests collection
    await ongoingRequestsCollection.DeleteOneAsync(req => req.Id == requestObject.Id);

    //commit transaction
    await session.CommitTransactionAsync();
}
catch (Exception)
{
    //abort transaction
    await session.AbortTransactionAsync();

    //throw the exception to handle further up the stack (knowing that the transaction failed)
    throw;
}

它在session.StartTransaction() 行一直失败,并出现如下所示的异常。

抛出异常:'System.NotSupportedException' in MongoDB.Driver.Core.dll

知道我做错了什么吗?我知道与数据库的连接很好,因为我可以执行读取、写入和删除操作。它只是不会执行此事务,但如果我删除与事务相关的功能,它就可以正常工作。

【问题讨论】:

    标签: c# mongodb transactions


    【解决方案1】:

    您不仅应该提供完整的异常消息类型,而且通常可以让您了解更多细节。仅基于异常类型,您可以:

    1. 您使用不支持事务的独立 mongod 服务器。
    2. 您没有可用的 mongod/mongos 服务器。如果它是恒定的行为并且您可以运行任何其他操作(find/insert/ping 等),则不是您的情况。

    我会投票赞成您使用独立服务器,因此您应该在副本集或分片服务器配置上替换它。

    【讨论】:

    • 我使用了AggregateException 来捕获这个异常,因为大多数 MongoDb 的东西都是异步的。你是对的,我得到的例外是"standalone servers do not support transactions."
    猜你喜欢
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2011-02-08
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多