Выражение LINQ, которое содержит ссылки на запросы, связанные с различными контекстами - PullRequest
4 голосов
/ 11 августа 2011

У меня есть этот запрос:

var list = (from t1 in context1.SomeTable
            join t2 in context2.SomeTable on t1.ID equals t2.ID
            where //some where clause
            select new { t1.SomeField, t2.SomeField }).ToList());

Я получу эту ошибку при попытке выполнить этот запрос:

Указанное выражение LINQ содержит ссылки на запросы, связанные сразличные контексты.

  1. Почему это не разрешено с LINQ to Entities?
  2. Возможно ли это с LINQ to Entities по-другому?будет обходной путь для этого?

1 Ответ

6 голосов
/ 11 августа 2011

Я думаю, это потому, что создаваемое вами утверждение преобразуется в SQL за кулисами и запускается в базе данных.Поскольку разные контексты могут поступать из разных баз данных или даже с разных серверов, нет гарантии, что данные в context2 доступны для context1 при запросе сервера.

Вы можете вернуть данные из каждого контекста и преобразовать их в IEnumerableи затем выполните стандартные запросы linq, но у вас есть явные накладные расходы на передачу данных и обработку в памяти, которые в противном случае выполнялись бы ядром базы данных.

...