Могу ли я клонировать IQueryable для запуска в DbSet для другого DbContext?C#

Место общения программистов C#
Anonymous
Могу ли я клонировать IQueryable для запуска в DbSet для другого DbContext?

Сообщение Anonymous »

Предположим, с помощью некоторой условной логики за множество шагов я создал экземпляр IQueryable, который мы назовем запросом.

Я хочу получить общее количество записей и страницу данных, поэтому я хочу вызвать query.CountAsync() и query.Skip(0).Take(10).ToListAsync(). Я не могу вызывать их последовательно, потому что возникает состояние гонки, когда они оба пытаются одновременно выполнить запрос к одному и тому же DbContext. Это недопустимо:


"Вторая операция началась в этом контексте до завершения предыдущей асинхронной операции. Используйте 'await', чтобы гарантировать, что все асинхронные операции завершились до вызова другого метода в этом контексте. Никакие члены экземпляра не могут быть потокобезопасными.


Я не уверен. хочу «ждать» первого, прежде чем начинать второй. Я хочу как можно скорее запустить оба запроса. Единственный способ сделать это — запустить их из отдельных DbContexts. Кажется смешным, что мне придется строить весь запрос (или 2, или 3) параллельно, начиная с разных экземпляров DbSet. Есть ли способ клонировать или изменить IQueryable (не обязательно этот интерфейс, но его базовую реализацию), чтобы у меня была одна копия, работающая в DbContext "A", и другая, которая будет выполняться в DbContext "B", чтобы оба запроса могли выполняться одновременно? Я просто пытаюсь избежать перекомпоновки запроса X раз с нуля только для того, чтобы запустить его в X контекстах.

Подробнее здесь: https://stackoverflow.com/questions/510 ... -dbcontext

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