System.InvalidOperationException: ExecuteReader требует открытого и доступного Соединения. Текущее состояние соединения открыто - PullRequest
0 голосов
/ 29 апреля 2020

Привет. Итак, в журналах появляется ошибка, и некоторые функции иногда нарушаются, но она прерывистая.

Полная трассировка стека выглядит следующим образом:

System.Data.Entity.Core.EntityCommandExecutionException: произошла ошибка при выполнении определения команды. Смотрите внутреннее исключение для деталей. ---> System.InvalidOperationException: ExecuteReader требует открытого и доступного Соединения. Текущее состояние соединения открыто. в System.Data.SqlClient.SqlConnection.GetOpenConnection (метод String) в System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute (метод String, команда SqlCommand) в System.Data.SqlClient.SqlCommand.lean ) при System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, runBehavior runBehavior, булевой returnStream, метод String, TaskCompletionSource 1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) at System.Data.Entity.Infrastructure.Interception.InternalDispatcher 1.Dispatch [TTarget, TInterceptionContext, TResult] (цель TTarget, развлечение c3 operation, TInterceptionContext interceptionContext, Action 3 выполнение, Action 3 executed) at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext) at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) --- End of inner exception stack trace --- at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) at System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func 1 fun c, IDbExecutionStrategy executeStrategy, логическое значение startLocalTransaction, логическое значение releaseConnectionOnSuccess) в операции System.Data.Entity.Core.Objects.ObjectQuery 1.<>c__DisplayClass7.<GetResults>b__5() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func 1) в System.Data.Entity.Core.Object. ObjectQuery 1.GetResults(Nullable 1 forMergeOption) в System.Data.Entity.Core.Objects.DataClasses.EntityCollection 1.Load(List 1 коллекция, MergeOption mergeOption) в System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad () в системе .Data.Entity.Core. Objects.Internal.LazyLoadBehavior.LoadProperty [TItem] (свойство TItemValue, строковое отношение в System.Web. Mvc .ControllerActionInvoker.InvokeActionMethod (ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 2.CallEndDelegate (IAsyncResult asyncResult) в System.Web. * 10Sync. ) в System.Web. Mvc .Asyn c .AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d () в System.Web. Mvc .Asyn c .AsyncControllerActionInvoker.AsyncInvocationWithF__bid.dll (<)>.>. Web. Mvc .Asyn c .AsyncControllerActionInvoker.AsyncInvocationWithFilters. <> C__DisplayClass46.b__3f () в System.Web. Mvc .Asyn c .AsyncControllerActionInvoker.Async__visithW.>>. ass46.b__3f () в System.Web. Mvc .Asyn c .AsyncControllerActionInvoker.AsyncInvocationWithFilters. <> c__DisplayClass46.b__3f () в System.Web. Mvc .Asyn c .AsyncIninController. c__DisplayClass46.b__3f () в System.Web. Mvc .Asyn c .AsyncControllerActionInvoker.AsyncInvocationWithFilters. <> c__DisplayClass46.b__3f () в System.Web. Mvc .Asyn * 10inCync. c__DisplayClass46.b__3f () в System.Web. Mvc .Asyn c .AsyncControllerActionInvoker.AsyncInvocationWithFilters. <> c__DisplayClass46.b__3f () в System.Web. Mvc .AynSync в качестве объекта. ) в System.Web. Mvc .Asyn c .AsyncControllerActionInvoker. <> c__DisplayClass21. <> c__DisplayClass2b.b__1 c () в System.Web. Mvc .Asyn c .AsyncControllerActionIn__play>. .b__1e (IAsyncResult asyncResult) в System.Web. Mvc .Asyn c .AsyncControllerActionInvoke r.EndInvokeAction (IAsyncResult asyncResult) в System.Web. Mvc .Controller.b__1d (IAsyncResult asyncResult, ExecuteCoreState innerState) в System.Web. Mvc .Asyn c .AsyncResallEegnateRate. IAsyncResult asyncResult) в System.Web. Mvc .Controller.EndExecute (IAsyncResult asyncResult) в System.Web. Mvc .MvcHandler.b__5 (IAsyncResult asyncResult, ProcessRequestState inner.yn. 1067). * .AsyncResultWrapper.WrappedAsyncVoid`1. CallEndDelegate (IAsyncResult asyncResult) в System.Web. Mvc .MvcHandler.EndProcessRequest (IAsyncResult asyncResult) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.tep.Exp.Exp. Шаг IExecutionStep) в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логический и завершенный синхронно)

Я видел несколько решений о множественных активных наборах результатов в строке подключения, но, очевидно, это обходной путь, а не решение .

Трассировка стека переносит меня в этот раздел кода, хотя я не совсем понимаю, что это такое. Я беру детские товары, хотя я не уверен.

var childProducts = _cacheManager.Get("CHILD_PRODUCTS_" + parentProductId, () => _productService.GetAssociatedProducts(parentProductId));

Любое руководство будет оценено. Спасибо

1 Ответ

1 голос
/ 29 апреля 2020

Вот ключевой бит:

    System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad() 
at  System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.LoadProperty[TItem]

Ваш сервис возвращает объекты с включенной отложенной загрузкой. Объекты с отложенной загрузкой имеют ссылку на DbContext, который их загрузил, и поэтому не могут быть доступны нескольким потокам или недоступны после удаления экземпляра DbContext. Поэтому, если вы возвращаете объекты из метода контроллера для сериализации или кэшируете их для использования другими запросами, отложенная загрузка должна быть отключена.

Вам необходимо отключить отложенную загрузку для объектов, которые будут получить сериализованный или кэшированный .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...