首页 新闻 会员 周边

c#更多多个不同的数据库如何用事务实现?

0
悬赏园豆:100 [已解决问题] 解决于 2019-11-20 17:07

问题:
例如有三个步骤:1.更新Couchbase数据;2:更新MongoDB,3:更新Redis;
这三个步骤如何能用事务这种操作,如何保证任何一个失败其他回滚,保障数据一致性?

问题补充:

不同的db,并不是同一个db

明&天的主页 明&天 | 初学一级 | 园豆:85
提问于:2019-11-14 10:04
< >
分享
最佳答案
0

那你只能自己写代码控制了,当任意一个失败,回滚所有已经做过的更改(可能需要在操作之前记录下老数据,像redis就不支持回滚吧),注意需要考虑如果恢复到老数据时出错怎么办,还有是不是有多个用户可以同时操作,是否要加锁。

或者你找找有什么第三方的,没有的话就自己写吧,类似这样:

interface IRollBackEnable
{
  void RollBack();
  bool Run()
}

IRollBackEnable one = ...
IRollBackEnable two = ...
IRollBAckEnable three = ...

list = [one, two, three];
for i = 0, i < 3 ; i++:
   if list[i].Run() == false:
      for(j = 0; j < i; j++):
          list[j].RoolBack();
       
收获园豆:50
会长 | 专家六级 |园豆:12401 | 2019-11-14 10:26
其他回答(3)
0

引用System.Data.Entity;
using (var trans = db.Database.BeginTransaction())
{
try
{
if ("ok")
{
tran.Commit();
}
}
catch (Exception ex)
{
tran.Rollback();
}
}
}
}

收获园豆:20
你小子嚣张呀 | 园豆:630 (小虾三级) | 2019-11-14 10:17

你好,你写的这个db是哪个?我这分别有三个不同的db啊,Couchbase,Mondo,Redis;并不是操作同一个db啊

支持(0) 反对(0) 明&天 | 园豆:85 (初学一级) | 2019-11-14 10:20

@天空自由: 能不能设三个bool的flag,如果有一个为false,那么三个db就都回滚

支持(0) 反对(0) 你小子嚣张呀 | 园豆:630 (小虾三级) | 2019-11-14 10:26
0

代码逻辑控制,每个db操作记录好异常。并对其使用成功/失败进行打标记(比如boolean、int值等);然后事物提交时进行状态判断,有一个不满足即rollback。否则提交事物

收获园豆:10
Ctrl` | 园豆:3317 (老鸟四级) | 2019-11-14 10:31
0

想想代码怎么实现事务过程,如安装、数据库写入等等,那么实现无非也是如此。

收获园豆:20
花飘水流兮 | 园豆:13560 (专家六级) | 2019-11-14 13:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册