EF Core — несколько асинхронных вызовов в контексте вызывают ошибкуC#

Место общения программистов C#
Ответить
Anonymous
 EF Core — несколько асинхронных вызовов в контексте вызывают ошибку

Сообщение Anonymous »

Вот такая ситуация у меня. Я создал серверное приложение blazor, которое управляет запасами продуктов. У меня есть несколько репозиториев, которые используют один и тот же контекст БД для поиска или запроса объектов базы данных.
На моей странице инвентаризации у меня есть асинхронный вызов, который ищет все продукты инвентаризации пользователя в зависимости от параметры поиска (Поиск вызывается каждый раз, когда пользователь вводит букву в поле ввода поиска). Кажется, я получаю эту ошибку, когда поисковый запрос вызывается несколько раз за короткий промежуток времени:
"вторая операция была запущена в этом экземпляре контекста до завершения предыдущей операции"< /p>
Вот моя конфигурация базы данных:

Код: Выделить всё

 builder.Services.AddDbContext(options =>
{
options.UseSqlServer(builder.Configuration.GetConnectionString("NimaDbConnection"));
});
ДИ:

Код: Выделить всё

services.AddScoped();

services.AddScoped();
Вот вызов компонента бритвы:

Код: Выделить всё

private async Task SearchUserInventoryProducts(int pageNumber)
{
PaginationFilter.PageNumber = pageNumber;

UserInventoryProductMappings = await _userInventoryProductMappingService
.SearchByUserInventoryId(PaginationFilter, UserInventory.UserInventoryId);
}
мой сервис:

Код: Выделить всё

public async Task
> SearchByUserInventoryId(PaginationFilter paginationFilter, int userInventoryId)
{
var result = await _repository.SearchByUserInventoryId(_mapper.Map(paginationFilter), userInventoryId);

return _mapper.Map(result);
}
мой репозиторий:

Код: Выделить всё

 public async Task
>

SearchByUserInventoryId(PaginationQuery query, int userInventoryId)
{
try
{
var defaultQuery = GetDefaultQuery().Where(x => x.UserInventoryId == userInventoryId);

if (query.SearchString != null)
{
defaultQuery = defaultQuery.Where(x => x.Product.NameLabel.LabelDescriptions.Any(x => x.Description.Contains(query.SearchString)));
}

if (query.SortBy != null && query.SortById != null)
{
switch (query.SortBy)
{
case "productCategory":
defaultQuery = defaultQuery.Where(x => x.Product.ProductCategoryId == query.SortById);
break;
case "productSubCategory":
defaultQuery = defaultQuery.Where(x => x.Product.ProductSubCategoryId == query.SortById);
break;
}
}

int count = defaultQuery.Count();
return new PagedResponse
{
Data = await defaultQuery
.Skip((query.PageNumber - 1) * query.PageSize)
.Take(query.PageSize)
.ToListAsync(),
PageNumber = query.PageNumber,
PageSize = query.PageSize,
TotalPages = (int)Math.Ceiling(count / (double)query.PageSize)

};
}
catch (Exception e)
{
_logger.LogError(e, e.Message);

throw;
}
}
Я позаботился о том, чтобы все мои запросы были обработаны должным образом. Я также пытался переключить контекст БД на временный срок службы, но безуспешно. Мои службы, репозитории и контекст используют ограниченный срок службы службы. Что я делаю не так в этом случае? Спасибо за помощь.


Подробнее здесь: https://stackoverflow.com/questions/734 ... uses-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»