1

我有两个不同数据库的不同实体。 在我的过程中,我想操纵两个数据库,并且整个过程必须处于事务中。 我已经用TransactionScope尝试过了。它适用于单个实体。实体框架中两个不同实体的交易4

var entity1 = clsProject.GetEntity1(); 
var entity2 = clsProject.GetEntity2(); 
System.Transactions.TransactionScope tranScope = new System.Transactions.TransactionScope(); 
entity1.Connection.Open(); 
entity2.Connection.Open(); 

//Do operations 
entity1.SaveChanges(false); 
entity2.SaveChanges(false); 
tranScope.Complete(); 
entity1.AcceptAllChanges(); 
entity2.AcceptAllChanges(); 

但是,它在这条线上引发了一个错误:entity2.Connection.Open(); 错误消息:底层提供程序在打开时失败。 内部异常:合作伙伴事务管理器已禁用其对远程/网络事务的支持。 (来自HRESULT的例外:0x8004D025)

请给出你的想法。

由于事先

纳雷什Goradara

回答

3

如果你的第二个数据库是你需要打开Distributed Transaction Coordinator两个服务器上的另一台服务器上,并且将TransactionScope的工作。

+0

它已经打开,但它不起作用。同样的错误。 –

+0

要进行测试,请在安全选项卡上尝试“无需身份验证”。 –

+0

我将事务范围封装在using语句中,请尝试使用它。 –

1

如前所述,您需要启用分布式事务处理协调器,但您还需要将其配置为允许传入和/或传出连接。

另外:出于测试目的,您可以将其设置为不需要任何身份验证。

所有这些设置均可在“组件服务”MMC的“分布式事务处理协调器”的“安全”选项卡上找到。值得注意的Distributed Transaction Coordinator

的另一件事:

所有这一切都可以通过“尤金S.”提供的链接上找到微软称为DTCPing一个DTC测试工具。您可以将这个工具提取到两个要参与事务的服务器上,同时在每个服务器上运行程序并将“事务伙伴”名称(这只是另一台计算机的名称)作为参数。点击每个服务器上的运行按钮,该工具将为您运行一些测试 - 它也有一些相当不错的错误报告。