В проекте используются:
- SQL-сервер
- .NET ядро 3
- Ядро EF
В моем проекте у меня есть миллионы данных/записей, которые мне нужны для параллельного запроса на чтение в API из 4 разных таблиц. DBContext
имеет ограниченное время жизни, как это рекомендуется. Мне нужно сделать параллельные вызовы DBContext
, но когда я пытаюсь, он говорит, что второй экземпляр запущен, когда один уже используется (поскольку время жизни ограничено).
- Я пытался использовать
AsNoTracking()
для этих конкретных запросов, но все равно та же ошибка. - Я не могу использовать переходный Lifetime.
Проект использует шаблон репозитория, не может использовать новый экземпляр
DBcontext
в контроллерах.public MemberRepository( IMemberEntityMappingHelper memberEntityMappingHelper, IMapperExtension mapper, ProjectDBContext context) : base(context, mapper) { _memberEntityMappingHelper = memberEntityMappingHelper; } public List<MemberSummaryModel> GetMembers(int foreignKeyId) { List<MemberEntity> members = _context.Members .Include(x => x.Sample) .Where(x => x.SampleForeignkeyId == foreignKeyId && x.IsDeleted == false) .ToList(); return _memberEntityMappingHelper.EntityToSummaryModelList(members); }
Параллельные звонки -
Parallel.Invoke(() =>
{
// Read from table 1
},
() =>
{
// Read from table 2
});
Мне нужно оптимизировать мой код, чтобы улучшить время отклика.
- Есть ли способ запуска параллельных запросов (только чтение)?
DbContext
не является потокобезопасным, один экземпляр не может обновлять/создавать записи для одного экземпляра, но почему я не могу выполнять параллельные запросы на чтение?- Сколько времени ожидается для получения 30 000 строк за раз (когда я использую все индексы)? Как я могу уменьшить его, у меня загрузка данных занимает 2 минуты?
MultipleActiveResultSets
? - person Roger Wolf   schedule 20.05.2020