首页 > 解决方案 > 实体框架随机数据库访问失败

问题描述

我正在使用实体框架来处理我的数据库。我创建了一个 WCF 服务,安装在 IIS 上。

该服务接收大量请求,并且每次都必须更新数据库中的一些记录。有时,数据访问似乎随机失败,并显示以下消息:

System.Data.Entity.Core.EntityException:基础提供程序在打开时失败。---> System.Data.SqlClient.SqlException: Sièverificato un errore di rete o specifico dell'istanza mentre si cercava di stabilire una connessione con SQL Server。Il server non è stato trovato o non è accessibile。Verificare che il nome dell'istanza sia corretto e che SQL Server sia configurato in modo da connessioni connessioni remote。(提供者:SQL 网络接口,错误:26 - Errore nell'individuazione del server/dell'istanza specificata)

堆栈跟踪是

在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识、SqlConnectionString connectionOptions、SqlCredential 凭据、对象 providerInfo、String newPassword、SecureString newSecurePassword、布尔重定向用户实例、SqlConnectionString userConnectionOptions、SessionData reconnectSessionData、DbConnectionPool 池、字符串 accessToken、布尔 applyTransientFaultHandling、SqlAuthenticationProviderManager sqlAuthProviderManager )

在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项,DbConnectionPoolKey poolKey,DbConnectionOptions 用户选项)

在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)

在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)

在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,UInt32 waitForMultipleObjectsTimeout,布尔allowCreate,布尔onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal&连接)

在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource`1 重试,DbConnectionOptions userOptions,DbConnectionInternal& 连接)

在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource`1 重试,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal& 连接)

在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)

在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 重试)

在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 重试)

在 System.Data.SqlClient.SqlConnection.Open()

在 System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action2 操作,TInterceptionContext interceptionContext,Action 3 executing, Action3 执行)

在 System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection 连接,DbInterceptionContext 拦截上下文)

在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.b__0()

在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 操作)

在 System.Data.Entity.Core.EntityClient.EntityConnection.Open()

--- Fine della traccia dello stack dell'eccezione interna ---

在 System.Data.Entity.Core.EntityClient.EntityConnection.Open()

在 System.Data.Entity.Core.Objects.ObjectContext.EnsureConnection(Boolean shouldMonitorTransactions)

在 System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)

在 System.Data.Entity.Core.Objects.ObjectQuery`1.<>c__DisplayClass7.b__5()

在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 操作)

在 System.Data.Entity.Core.Objects.ObjectQuery 1.GetResults(Nullable1 forMergeOption)

在 System.Data.Entity.Core.Objects.ObjectQuery`1..GetEnumerator>b__0()

在 System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()

在 System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 源)

在 C:\MyService.svc.cs:riga 52

写在堆栈跟踪中的代码行 52 是:

using (var db = new Entities())
{
    var f = db.Table.FirstOrDefault(x => x.ID == ID);  //this line throws the error
    ...

由于连接字符串始终相同(在 web.config 文件中)并且大部分请求都是成功的,为什么有时这段代码会抛出上面报告的异常?

任何建议表示赞赏,我不知道这里有什么问题。

标签: c#sql-serverentity-frameworkwcfiis

解决方案


推荐阅读