2009-12-04 99 views
1

我有一个问题,我知道是本地的,与事务范围有关的东西,可能是MSDTC(我不太了解它)。为什么TransactionScope使用实体框架导致问题?

其他项目的开发商(相同的代码,一切COMMITED)执行整体解决方案,但是当我试图从数据库中(不总是)得到一些数据,我有以下错误:

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) 

如果我评论使用的事务范围,完整()和一切,它按预期工作。

你有过这个问题吗?

编辑:

抛出这个错误是很简单的东西,比如查询:

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

编辑,解决了:

服务器的LMHOSTS已经过时。

+0

你能写更多关于什么导致问题的东西吗? – kubal5003 2012-01-11 13:38:51

+0

@ kubal5003抱歉,但有很长一段时间,我不记得了。 =/ – 2012-01-12 02:42:59

回答

2

防火墙规则阻止DTC端口,也许?或者一个不完整的防火墙规则允许一些DTC端口,但不是其他的?我从来没有通过防火墙获得分布式事务。即使在遵循directions之后。

+0

我试图运行DTCPing.exe,但它在advpack.dll中引发错误:S只有一个结果在谷歌中没有提到有关错误=/ – 2009-12-04 19:45:59

+0

问题:服务器的lmhosts已过时。 – 2009-12-04 20:00:45