【问题标题】:Transaction across multiple databases (C#)跨多个数据库的事务 (C#)
【发布时间】:2013-10-04 18:44:22
【问题描述】:

我正在开发一个将更新多个数据库(SQL Server 2008 和 Oracle 11g)的应用程序。 TransactionScope 似乎是确保更新始终正确提交的合乎逻辑的方式,但安装 MSDTC 似乎不是一种选择。将来,此应用程序还可能使用不支持分布式事务的数据源。

我花了很多时间试图提出另一种解决方案,但似乎没有任何效果。所有搜索都指向 TransactionScope 和分布式事务。

应用程序是使用实体框架用 C# 编写的。任何人有任何建议,不需要升级到分布式事务?以下是我的想法清单,但都无处可去。

+TransactionScope:无法使用 MSDTC。未来的数据源可能不支持分布式事务。

+手动跟踪和回滚事务:我还没有找到在实体框架中执行此操作的好方法。

+队列/日志失败,因此它们可以被另一个进程重新提交:无法想出一个好的方法来一般地存储失败的提交。还需要确保重新提交不会覆盖较新的数据。

【问题讨论】:

  • 抱歉,哪一个不支持分布式事务?
  • 目前所有来源都支持它们(尽管我们无法打开 MSTDC)。我在公立学区工作。我们有多种不同的系统来处理不同的事情(入学、成绩、出勤等)。我正在尝试编写一个类库,我们可以使用它来一次更新所有系统(如果一个孩子更改了他的名字,我们可以使用该库一次更新所有应用程序中的名称)。可以随时引入以 XXXXX 为数据存储的新系统。
  • 我认为所有应用程序都必须使用相同的共享数据。
  • 在理想世界中,是的。然而,这些都是我们并不总是(大部分时间)有太多控制权的第 3 方应用程序。
  • 我认为您需要研究一个符合 XA 的事务管理器,可能位于中间层。 MS 有DTC,尽管我从未亲自使用过它。 Oracle 有Weblogic,XA 的概述是here。您正在尝试做的是协调分布式事务,所以我不确定“不使用分布式事务”您将如何做到这一点

标签: c# .net oracle entity-framework transactions


【解决方案1】:

@ThinkJet。该相关链接是一个有趣的观点。在我的情况下,一个小的失败,就像描述的那样,不会是什么大不了的。我们目前有其他东西试图让所有这些系统保持同步(并不总是成功)。如果一两个事务确实失败了,它应该由这些进程来处理。

阅读完这些 cmets 后,我可能会尝试让这个库将数据写入它自己的数据库。然后,将这些更改同步到其他源,以便其他应用程序可以看到这些更改。这会导致某些更新稍有延迟,但即使这样也会比我们现在拥有的更好。

【讨论】:

    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 2016-07-21
    • 2017-12-27
    • 2011-02-10
    • 1970-01-01
    • 2011-10-25
    • 2023-03-15
    相关资源
    最近更新 更多