C# MongoDB事务
我在C中有一个类似于以下的方法:C# MongoDB事务,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我在C中有一个类似于以下的方法: private void Save(object) { mongoCollection.Save(object); someotherRelationaldb.Save(object); } 我有两个数据库,我必须在其中保存一个对象。一个是MongoDB,另一个是关系数据库SQL server。如果关系数据库上的提交失败,我想回滚MongoDB保存,我想保持保存顺序。使用C驱动程序回滚的正确方法是什么 你不能。 实现这一点的唯一方法是包装一些其他R
private void Save(object)
{
mongoCollection.Save(object);
someotherRelationaldb.Save(object);
}
我有两个数据库,我必须在其中保存一个对象。一个是MongoDB,另一个是关系数据库SQL server。如果关系数据库上的提交失败,我想回滚MongoDB保存,我想保持保存顺序。使用C驱动程序回滚的正确方法是什么 你不能。
实现这一点的唯一方法是包装一些其他RelationalDB.Saveobject;在try catch中,在catch上执行mongoCollection。移除
您可能需要对象上的已知标识符属性,然后可以执行以下操作:
mongoCollection.Remove(Query.EQ("_id", object.Id));
因此,您的Save方法看起来有点不整洁:
private void Save(object)
{
mongoCollection.Save(object);
try
{
someotherRelationaldb.Save(object);
}
catch
{
mongoCollection.Remove(Query.EQ("_id", object.Id));
}
}
另一种方法是在成功写入someOtherRelationaldb后更新的对象上存储flag属性
这也不太理想,但您可以修改查询,只返回IsPersisted标志为true的文档
虽然我不认为这两种方法在严重碎片化的环境中都能发挥作用。你不能。
实现这一点的唯一方法是包装一些其他RelationalDB.Saveobject;在try catch中,在catch上执行mongoCollection。移除
您可能需要对象上的已知标识符属性,然后可以执行以下操作:
mongoCollection.Remove(Query.EQ("_id", object.Id));
因此,您的Save方法看起来有点不整洁:
private void Save(object)
{
mongoCollection.Save(object);
try
{
someotherRelationaldb.Save(object);
}
catch
{
mongoCollection.Remove(Query.EQ("_id", object.Id));
}
}
另一种方法是在成功写入someOtherRelationaldb后更新的对象上存储flag属性
这也不太理想,但您可以修改查询,只返回IsPersisted标志为true的文档
虽然我不认为这两种方法在严重碎片化的环境中都能发挥作用。是的
现在可能了
例如Java
try (ClientSession clientSession = client.startSession()) {
clientSession.startTransaction();
collection.insertOne(clientSession, docOne);
collection.insertOne(clientSession, docTwo);
clientSession.commitTransaction();
}
对
现在可能了
例如Java
try (ClientSession clientSession = client.startSession()) {
clientSession.startTransaction();
collection.insertOne(clientSession, docOne);
collection.insertOne(clientSession, docTwo);
clientSession.commitTransaction();
}
谢谢我想是的。。我的保存可以是更新或插入:在更新的情况下,您可能不想删除文档。。但是否将其恢复到更新前的最后一个版本?只不过是一件可以保存的东西mind@Alex,如果服务器在save抛出异常后崩溃,但在从MongoDB中删除该项之前会发生什么情况?现在我注意到你的帖子日期是2013年,有没有更优雅的方式来处理这个问题呢+1.谢谢。。我想是的。。我的保存可以是更新或插入:在更新的情况下,您可能不想删除文档。。但是否将其恢复到更新前的最后一个版本?只不过是一件可以保存的东西mind@Alex,如果服务器在save抛出异常后崩溃,但在从MongoDB中删除该项之前会发生什么情况?现在我注意到你的帖子日期是2013年,有没有更优雅的方式来处理这个问题呢+1.