我创建了一个监听TCP / IP端口的Windows服务,并使用Entity Framework将接收的数据保存在数据库中。大部分时间它工作正常,但有时候它会抛出异常“底层提供程序在打开时失败”。在数据库中保存数据。 这是我的例外细节:
Exception: 2/27/2014 10:31 AM:
The underlying provider failed on Open.
at System.Data.Entity.Core.EntityClient.EntityConnection.Open()
at System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection()
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClassb.<GetResults>b__9()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Entity.Core.Objects.ObjectQuery`1.<System.Collections.Generic.IEnumerable<T>.GetEnumerator>b__0()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[TResult](IEnumerable`1 sequence)
at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
at System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression)
at System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)
at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
at Service.DemoService.Save(String received, TcpClient client)
此异常背后的原因是什么以及如何解决它?
答案 0 :(得分:7)
通常,在使用Entity Framework时,您需要在连接字符串中启用multiple active result sets选项,方法是将 MultipleActiveResultSets 设置为 true ,如下所示。 / p>
<add name="conn"
connectionString="
Data Source=.\;
Initial Catalog=TDB;
UID=admin123;
PWD=123;
MultipleActiveResultSets=True"
providerName="System.Data.SqlClient" />
确认它可以解决您的问题。
答案 1 :(得分:0)
检查SQL Server是否正在运行。 只需打开任务管理器和转到服务,单击下面的“服务”按钮,检查SQL Server是否正在运行。
答案 2 :(得分:0)
就我而言,问题是我用来连接到SQL Server的帐户未添加到应用程序池标识中。将帐户“域\用户名”添加到应用程序池后,它开始工作。
答案 3 :(得分:0)
更改 综合安全性= False; MultipleActiveResultSets =真 在您的连接字符串中,应该可以。