第一次来这里...
我正在编写一个使用 Oracle.ManagedDataAccess 连接到 Oracle 数据库的 WebAPI 应用程序。我正在使用 EF6,我间歇性地得到
“意外的连接状态。使用包装提供程序时,请确保在包装的 DbConnection 上实现 StateChange 事件。”
我正在使用 Autofac 并将所有内容注册为“InstancePerDependency”(也尝试过 InstancePerRequest),所以我应该在每个请求中获取一个新实例,但似乎一旦我的连接进入这种状态,它就无法恢复。
我尝试关闭连接池并在我的连接上调用 Dispose()。
有谁知道这种行为背后的原因是什么,或者提供一些关于这个异常意味着什么的额外细节,因为 Oracle.ManagedDataAccess.Client.OracleConnection 似乎实现了 StateChange 事件。
谢谢!
这是堆栈跟踪:
在 System.Data.Entity.Core.Objects.ObjectContext.EnsureContextIsEnlistedInCurrentTransaction[T](Transaction currentTransaction, Func
1 openConnection, T defaultValue) at System.Data.Entity.Core.Objects.ObjectContext.<EnsureConnectionAsync>d__9.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Core.Objects.ObjectContext.<ExecuteInTransactionAsync>d__3d
1.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices .TaskAwaiter.ThrowForNonSuccess(任务任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在 System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter1.GetResult() at System.Data.Entity.Core.Objects.ObjectQuery
1.d__e.MoveNext() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)在 System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter1.GetResult() at System.Data.Entity.Internal.LazyAsyncEnumerator
1.d__0.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪---在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务)在 System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.d__25`1.MoveNext() 的 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)