为什么TransactionScope使用Entity Framework导致问题?

时间:2009-12-04 19:33:21

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

我遇到一个问题,我知道这是一个与事务范围有关的本地问题,可能是MSDTC(我不太了解它)。

另一个项目开发人员(相同的代码库,提交的所有内容)执行整个解决方案,但是当我尝试从数据库中获取一些数据时(并非总是),我有以下错误:

The underlying provider failed on EnlistTransaction.


   at System.Data.EntityClient.EntityConnection.EnlistTransaction(Transaction transaction)
   at System.Data.Objects.ObjectContext.EnsureConnection()
   at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
   at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
   at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__0[TResult](IEnumerable`1 sequence)
   at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
   at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](Expression expression)
   at System.Linq.Queryable.First[TSource](IQueryable`1 source, Expression`1 predicate)

如果我评论使用事务范围,complete()和所有内容,它将按预期工作。

你以前遇到过这个问题吗?

编辑:

抛出此错误的查询非常简单,例如:

var entity = Entities.EntityX.First(p => p.ID == id);

编辑,已解决:

服务器的lmhosts已经过时了。

1 个答案:

答案 0 :(得分:2)

阻止DTC端口的防火墙规则可能吗?或者一个不完整的防火墙规则允许一些DTC端口,而不是其他端口?我从未让分布式事务通过防火墙很好地工作。即使遵循directions