170 похожих чатов

Всем привет! Есть вопрос. У меня есть EF Core. Есть контекст данных. На каждый

вызов я вызываю скоуп с контекстом, проще говоря, для каждой операции свой скоуп, поскольку я знаю, что в одном контексте нельзя параллельные запросы, но в разных контекстах можно.
Я хочу распараллелить это дело по типу (пример просто для наглядности):

Task<FirstEntity> firstTask;
Task<SecondEntity> secondTask;
using (IDbService dbService = new DbService(_db).DbServiceInstance)
firstTask = dbService.FirstEntities.GetFromDb(firstId);
using (IDbService dbService = new DbService(_db).DbServiceInstance)
secondTask = dbService.SecondEntities.GetSecondFromDb(secondId);
await Task.WhenAll(firstTask, secondTask);
var f = firstTask.Result;
var s = secondTask.Result;

Внутри методы обращения выглядят примерно так (в реальности сложнее, там трай-кетчи и всё такое, но для примера не важно):

public async Task<FirstEntity> GetFirstFromDb(int id) => await _db.FirstEntities.FindAsync(id);
public async Task<SecondEntity> GetSecondFromDb(int id) => await _db.SecondEntitites.FindAsync(id);

И вот код выполняется, проходит первый скоуп (успешно получает firstTask), контекст успешно диспоузится, начинается второй скоуп, и на попытке выполнить метод GetSecondFromDb() возникает ексепшн:
________________
"A second operation started on this context before a previous operation completed. This is usually caused by different threads using the same instance of DbContext, however instance members are not guaranteed to be thread safe. This could also be caused by a nested query being evaluated on the client, if this is the case rewrite the query avoiding nested invocations."
________________
И это очень безумно странно, поскольку как так это может быть, если у меня на каждый вызов БД свой контекст? И контексты никак не пересекаются.
Кто может подсказать, куда копать?
Я всё пробовал, вешал локер на порождение экземпляра контекста -- ничего не помогает.
Может ли быть дело в том, что у меня включена (в реальном проекте) ленивая загрузка?

2 ответов

5 просмотров
Ap6ye-Ap6ye Автор вопроса

Ни у кого нет идей, друзья? ;)

Ap6ye-Ap6ye Автор вопроса

Нашёл причину. В общем-то, LazyLoad всему виной. Отключил его, и всё пошло. Я так понимаю, нет способа совместить параллелизм и LazyLoad в EF?

Похожие вопросы

Обсуждают сегодня

Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Какой дос блять?
007
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
Карта сайта