System.NotSupportedException 和 MongoDb C# 事务
System.NotSupportedException with MongoDb C# Transactions
我正在尝试将数据从一个集合移动到另一个集合。因此,我将 RequestProcess 对象添加到 completedRequestsCollection 并将其从 ongoingRequestsCollection 中删除。使用事务来执行此操作是有意义的,以便在任一操作出现问题时可以回滚。
我找到了这个 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()
行一直失败并出现异常,如下所示。
Exception thrown: 'System.NotSupportedException' in
MongoDB.Driver.Core.dll
知道我做错了什么吗?我知道与数据库的连接很好,因为我可以执行读取、写入和删除。它只是不会执行此交易,但如果我删除与交易相关的功能,它会正常工作。
您应该提供整个异常消息,而不仅仅是类型,它通常可以让您了解更多细节。仅基于异常类型,您有:
- 您使用不支持事务的独立 mongod 服务器。
- 您没有可用的 mongod/mongos 服务器。如果它是恒定的行为并且您可以 运行 任何其他操作(
find
/insert
/ping
等)这不是您的情况。
我会投票支持您使用独立服务器,因此您应该在副本集或分片服务器配置上替换它。
我正在尝试将数据从一个集合移动到另一个集合。因此,我将 RequestProcess 对象添加到 completedRequestsCollection 并将其从 ongoingRequestsCollection 中删除。使用事务来执行此操作是有意义的,以便在任一操作出现问题时可以回滚。
我找到了这个 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()
行一直失败并出现异常,如下所示。
Exception thrown: 'System.NotSupportedException' in MongoDB.Driver.Core.dll
知道我做错了什么吗?我知道与数据库的连接很好,因为我可以执行读取、写入和删除。它只是不会执行此交易,但如果我删除与交易相关的功能,它会正常工作。
您应该提供整个异常消息,而不仅仅是类型,它通常可以让您了解更多细节。仅基于异常类型,您有:
- 您使用不支持事务的独立 mongod 服务器。
- 您没有可用的 mongod/mongos 服务器。如果它是恒定的行为并且您可以 运行 任何其他操作(
find
/insert
/ping
等)这不是您的情况。
我会投票支持您使用独立服务器,因此您应该在副本集或分片服务器配置上替换它。