我遇到一个问题,我知道这是一个与事务范围有关的本地问题,可能是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已经过时了。
答案 0 :(得分:2)
阻止DTC端口的防火墙规则可能吗?或者一个不完整的防火墙规则允许一些DTC端口,而不是其他端口?我从未让分布式事务通过防火墙很好地工作。即使遵循directions。