【发布时间】: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