gpt4 book ai didi

C# Transaction Scope 在同一台服务器上有 2 个数据库导致异常

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:22 24 4
gpt4 key购买 nike

我有一个场景,我必须将数据插入 2 个数据库,但在同一个数据库服务器上,并且它必须在一个事务中。我正在使用 Entity Framework 6,并将我的每个数据库保存包装在事务范围内。问题是第一个数据库保存工作正常,但是当我尝试第二次保存到另一个数据库时,出现如下错误。

分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中为网络访问启用 DTC。

我读过一些文章,说我必须在 SQL Server 中启用一个功能,但我不相信我们的 DBA 会允许这种修改。所以我想首先验证没有其他解决方案可以代替启用 DTC。

这是我现有的 C# 代码,为简洁起见删除了一些细节。

using (TransactionScope transaction = new TransactionScope())
{
//database 1
using (var context1 = new SomeContext())
{
//......
//.....
context1.SaveChanges();
}

//database 2
using (var context2 = new SomeContext2())
{
//...
context2.SaveChanges();
}

transaction.Complete();
}

最佳答案

除了编写存储过程来为您完成工作之外,没有其他方法可以让您的代码在没有 MSDTC 的情况下完成这项工作。 MSDTC 负责跨不同来源(即两个数据库)代理交易。

您的 DBA 可能不允许进行更改,因为这是服务器级别的更改,但他们可能会自己启用该功能。请注意,如果它是一个开发服务器,您最终将不得不对您的项目必须运行的任何其他服务器执行相同的操作。

On MSDTC :

MSDTC is an acronym for Microsoft Distributed Transaction Coordinator. As the name says, MSDTC is a Windows service providing transaction infrastructure for distributed systems. In this case, a transaction means a general way of structuring the interactions between autonomous agents in a distributed system. Each transaction is a state transformation with four key properties – the ACID properties: Atomic (all or nothing), Consistent (legal), Isolated (independent of concurrent transactions) and Durable (once it happens, it cannot be abrogated). There are different techniques that implement the ACID properties but the most known one is two-phase commit.

关于C# Transaction Scope 在同一台服务器上有 2 个数据库导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43742402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com