我在 C# 中有如下方法:
private void Save(object)
{
mongoCollection.Save(object);
someotherRelationaldb.Save(object);
}
我有两个数据库,我必须在其中保存一个对象。一种是 MongoDB,另一种是关系数据库 SQL 服务器。如果关系数据库上的提交失败,我想回滚MongoDB保存(我想保持保存的顺序)。使用 C# 驱动程序回滚的正确方法是什么?
你不能。
做到这一点的唯一方法是包装someotherRelationaldb.Save(object);
在 try catch 中,并在 catch 中执行mongoCollection.Remove
您可能需要一个已知的标识符属性object
然后可以做类似的事情:
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));
}
}
另一种方法是将标志属性存储在object
已更新after成功写入someOtherRelationaldb
这也不完全理想,但您可以修改查询以仅返回文档,其中IsPersisted
标志是真的。
尽管我不这么认为,但这些方法在严重分片的环境中都不会发挥良好作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)