我在C#中有一个如下的方法:
private void Save(object)
{
mongoCollection.Save(object);
someotherRelationaldb.Save(object);
}
我有两个数据库,需要保存一个对象。一个是MongoDB,另一个是关系型数据库SQL Server。如果在关系型数据库上进行的提交失败了,我希望撤销MongoDB的保存(我希望维护保存的顺序)。使用C#驱动程序回滚的正确方法是什么。
我在C#中有一个如下的方法:
private void Save(object)
{
mongoCollection.Save(object);
someotherRelationaldb.Save(object);
}
我有两个数据库,需要保存一个对象。一个是MongoDB,另一个是关系型数据库SQL Server。如果在关系型数据库上进行的提交失败了,我希望撤销MongoDB的保存(我希望维护保存的顺序)。使用C#驱动程序回滚的正确方法是什么。
someotherRelationaldb.Save(object);
外部包裹 try catch,在 catch 语句中执行 mongoCollection.Remove
。object
上使用已知的标识属性,例如:mongoCollection.Remove(Query.EQ("_id", object.Id));
private void Save(object)
{
mongoCollection.Save(object);
try
{
someotherRelationaldb.Save(object);
}
catch
{
mongoCollection.Remove(Query.EQ("_id", object.Id));
}
}
对象
上存储一个标志属性,该属性在成功写入someOtherRelationaldb
后得到更新。IsPersisted
标志为真的文档。是的,
现在可以了。
例如Java;
try (ClientSession clientSession = client.startSession()) {
clientSession.startTransaction();
collection.insertOne(clientSession, docOne);
collection.insertOne(clientSession, docTwo);
clientSession.commitTransaction();
}