实体框架4中两个不同实体的交易

时间:2011-07-26 14:41:21

标签: sql-server-2008 c#-4.0 entity-framework-4 transactionscope

我有两个不同数据库的不同实体。 在我的过程中,我想操纵两个数据库,整个过程必须在事务中。 我尝试过TransactionScope。它适用于单个实体。

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)

请提出您的想法。

先谢谢,

Naresh Goradara

2 个答案:

答案 0 :(得分:3)

如果您的第二个数据库位于另一台服务器上,则需要在两台服务器上启用Distributed Transaction Coordinator,并且TransactionScope将正常工作。

答案 1 :(得分:1)

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

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

所有这些设置都可以在“组件服务”MMC中“分布式事务处理协调器”的“安全”选项卡上找到。

所有这一切都可以在“Eugene S.”提供的链接上找到:Distributed Transaction Coordinator

另外需要注意的一点是:Microsoft有一个名为DTCPing的DTC测试工具。您可以将此工具提取到要参与事务的两台服务器,同时运行每台服务器上的程序,并使用“事务伙伴”名称(这只是另一台计算机的名称)。点击每个服务器上的运行按钮,该工具将为您运行一些测试 - 它也有一些相当不错的错误报告。