Кто-нибудь знает, почему ToListAsync
выдаст ошибку:
"System.ObjectDisposedException: невозможно получить доступ к удаленному объекту"
в следующем коде?
using (var c = new Context())
{
var companies = await c.Database.SqlQuery<Company>("exec
GetStoredPrcedure @id", new SqlParameter("@id", id))
.ToListAsync();
// Process companies.
}
Вот полная трассировка стека.
System.ObjectDisposedException: невозможно получить доступ к удаленному объекту. в System.Reflection.RuntimeAssembly._nLoad (имя_файла AssemblyName, кодовая строка строки, сборка доказательствSecurity, locationHame сборка locationHint, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, логическое throwOnFileNotFound, логическое выражение для принудительной проверки безопасности, логическое выражение для принудительной блокировки)
в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName assemblyRef, Evidence AssemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound,
Логическое значение forIntrospection, логическое значение suppressSecurityChecks) в System.Reflection.Assembly.Load (AssemblyName assemblyRef) в System.Data.Entity.Core.Metadata.Edm.MetadataAssemblyHelper.
SafeLoadReferencedAssembly (AssemblyName assemblyName) в System.Data.Entity.Core.Metadata.Edm.MetadataAssemblyHelper.d__0.MoveNext ()
в System.Linq.Enumerable.Any [TSource] (источник IEnumerable'1, предикат Func'2) в System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace.ImplicitLoadAssemblyForType (Тип типа, сборка, вызывающая сборку)
в System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace.TryDetermineCSpaceModelType (Type type, EdmType & modelEdmType)
в System.Data.Entity.Core.Query.InternalTrees.ColumnMapFactory.CreateColumnMapFromReaderAndClrType (средство чтения DbDataReader, тип Type, рабочая область MetadataWorkspace)
в System.Data.Entity.Core.Objects.ObjectContext.InternalTranslate [TElement] (читатель DbDataReader, String entitySetName, MergeOption mergeOption, логический поток, EntitySet & entitySet, TypeUsage & edmType)
at System.Data.Entity.Core.Objects.ObjectContext.d__73'1.MoveNext () --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача)
в System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter'1.GetResult () в System.Data.Entity.Core.Objects.ObjectContext.d__3d'1.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.d__9'1.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter'1.GetResult ()
at System.Data.Entity.Core.Objects.ObjectContext.d__70'1.MoveNext () --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача)
в System.Data.Entity.Utilities.TaskExtensions.CultureAwaiter'1.GetResult () в System.Data.Entity.Internal.LazyAsyncEnumerator'1.d__0.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в System.Data.Entity.Infrastructure.IDbAsyncEnumerableExtensions.d__5'1.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в Services.Companies.CompanyService.d__41.MoveNext ()
в API \ src \ Services \ Companies \ CompanyService.cs: строка 927
Исключение не появляется, пока сервер не увеличит трафик. Я подозреваю, что GC избавляется от соединения до того, как будет возвращен весь набор результатов, но я не уверен, почему или если я могу что-то сделать с этим.