При вызове ToList () после вызова скомпилированного запроса иногда (!) Я получаю исключение - System.InvalidOperationException: недопустимая попытка вызова Read, когда читатель закрыт.
Контекст БД создается для каждого вызова "invoke", запросы синхронно компилируются перед вызовом. Фрагмент кода называется одноразовым профессиональным файлом, который читается асинхронно.
Запрос инициализируется, компилируется и вызывается следующим образом.
public Func<SANAContext, int, string, IEnumerable<KeyValuePair<string, Importartikelhash>>> ImportingArticlesHashesQuery;
...
ImportingArticlesHashesQuery = EF.CompileQuery((SANAContext db, int LaLiNr, string lagerId) => db.Importartikelhash.AsNoTracking()
.Where(la => la.LieferantartikelId == LaLiNr && string.Compare(la.LagerId, lagerId, StringComparison.Ordinal) == 0).Select(a => new KeyValuePair<string, Importartikelhash>(a.LieferartikelNr, a)));
...
List<KeyValuePair<string, Importartikelhash>> records = ImportingArticlesHashesQuery.Invoke(context, supplier.SupplierInternalId, warehouse.Id).ToList();
На большом количестве данных я получаю исключение:
{System.InvalidOperationException: Invalid attempt to call Read when reader is closed.
at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
at System.Data.SqlClient.SqlDataReader.Read()
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.BufferlessMoveNext(DbContext _, Boolean buffer)
at Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementation[TState,TResult](Func`3 operation, Func`3 verifySucceeded, TState state)
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext()
at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Sanalogic.SupplierArticlesImport.SupplierDataParserApplication.Services.QueriesCompiler.DBHashValuesCache(PricatSupplier supplier, PricatWarehouse warehouse) in QueriesCompiler.cs:line 90}
Что может вызвать проблему? Я понимаю, что существует некоторая проблема с асинхронными операциями, но я не знаю, где ее искать.
Любая помощь высоко ценится!