c# - 为什么 TransactionScope 不能与 Entity Framework 一起使用?

标签 c# .net entity-framework transactions transactionscope

请参阅下面的代码。如果我初始化了多个实体上下文,那么我会在仅在第二组代码 上得到以下异常。如果我注释掉第二组它会起作用。

{"The underlying provider failed on Open."}

Inner: {"Communication with the underlying transaction manager has failed."}

Inner: {"Error HRESULT E_FAIL has been returned from a call to a COM component."}

请注意,这是一个示例应用程序,我知道连续创建 2 个上下文没有意义。但是,生产代码确实有理由在同一个 TransactionScope 中创建多个上下文,并且这一点无法更改。

编辑

这是我尝试设置 MS-DTC 的前一个问题。它似乎在服务器和客户端上都启用了。我不确定它是否设置正确。另请注意,我尝试这样做的原因之一是 TransactionScope 中的现有代码使用 ADO.NET 和 Linq 2 Sql...我希望它们也使用相同的事务。 (这听起来可能很疯狂,但如果可能的话,我需要让它发挥作用)。

How do I use TransactionScope in C#?

解决方案

Windows 防火墙阻止了与 MS-DTC 的连接。

using(TransactionScope ts = new System.Transactions.TransactionScope())
        {
                using (DatabaseEntityModel o = new DatabaseEntityModel())
                {
                    var v = (from s in o.Advertiser select s).First();
                    v.AcceptableLength = 1;
                    o.SaveChanges();
                }

                //-> By commenting out this section, it works
                using (DatabaseEntityModel o = new DatabaseEntityModel())
                {
                    //Exception on this next line
                    var v = (from s1 in o.Advertiser select s1).First();                         v.AcceptableLength = 1;
                    o.SaveChanges();
                }
                //->

                ts.Complete();
        }

最佳答案

您的 MS-DTC(分布式事务协调器)由于某种原因无法正常工作。 MS-DTC用于协调跨多个异构资源的事务结果,包括多个sql连接。

看看this link有关正在发生的事情的更多信息。

基本上,如果您确保您的 MS-DTC 正在运行并正常工作,那么使用 2 个 ADO.NET 连接应该没有问题 - 无论它们是 Entity Framework 连接还是任何其他类型。

关于c# - 为什么 TransactionScope 不能与 Entity Framework 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/794707/

相关文章:

c# - 导致#NAME 的 Excel XLL 函数链接/竞争条件

c# - 在 C# 中,我可以在编译类型中检查一个类是否可序列化吗?

entity-framework - LINQPad 4 无法找到 EntityFramework

linq - 将随机 Guid 列添加到 Linq to Entities 查询以获取随机记录

asp.net-mvc - 当使用 Entity Framework 在 MVC 中保存实体副本时,foreach 循环无法正常工作

c# - Wpf组合框通过鼠标选择项目

c# - Spin 在 Portable Class Library 中等待多次自旋

.net - 获取文件 : Wrong result

c# - WPF - 将 TextBox 的 FontFamily 绑定(bind)到 ComboBox

.net - SSL confluent-kafka-dotnet librdkafka SSL