У меня "работает" приложение .NetCore 2.2. Мой клиент попросил внести некоторые изменения, и я решил попробовать перенести приложение на .NetCore 3.1. EntiryFramework меня устраивает.
У моего клиента есть несколько «баз данных» MS SQL, таких как «Персонал», «Резервирование», «Биллинг» и т. Д. c. Мне очень часто приходится создавать запросы, которые сопоставляют людей из отдела кадров с биллингами и / или другими записями из других БД. Я делаю подобные вещи сейчас в версии 2.2.
Если я запустил запрос, похожий на следующий, я получу исключение:
Cannot use multiple DbContext instances within a single query execution. Ensure the query uses a single context instance.
Этот запрос, похоже, использует единственный контекст, но есть это та devicesInRoom
сущность, похороненная там. devicesInRoom
относится к типу IQueryable<string>
и исходит из "служебного" запроса, который я выполнял ранее. В основном я хочу ТОЛЬКО reservations
, где reservations.Device
совпадает с одним из элементов в devicesInRoom
.
var reservations = (
from reservation in reservationsContext.Reservations
from reservationType in reservationsContext.Types.Where(
reservationType => reservationType.Id.Equals(reservation.TypeId)
).DefaultIfEmpty()
from roomMates in devicesInRoom
.Where(
roomMates => roomMates.Equals(reservation.Device)
).DefaultIfEmpty()
where reservation.StartDate < viewEnd
&& reservation.EndDate > viewStart
&& reservation.Deleted.Equals(false)
select reservation.Device
).ToList();
Если я перепишу этот запрос как:
var reservations = (
from reservation in reservationsContext.Reservations
from reservationType in reservationsContext.Types.Where(
reservationType => reservationType.Id.Equals(reservation.TypeId)
).DefaultIfEmpty()
where reservation.StartDate < viewEnd
&& reservation.EndDate > viewStart
&& reservation.Deleted.Equals(false)
select reservation.Device
).ToList();
var thing = (
from res in reservations
from roomMates in devicesInRoom
.Where(
roomMates => roomMates.Equals(res)
).DefaultIfEmpty()
select res
).ToList();
Я все еще получаю указанную выше ошибку. Я не понимаю, почему запросы к БД - это плохо.
Как это исправить?