Как объединить таблицы из двух разных контекстов с LINQ2SQL? - PullRequest
4 голосов
/ 24 марта 2010

У меня есть 2 контекста данных в моем приложении (разные базы данных), и мне нужно иметь возможность запрашивать таблицу в контексте A с правильным соединением таблицы в контексте B. Как мне это сделать в LINQ2SQL?

Почему?: Мы используем продукт SaaS для отслеживания нашего времени, проектов и т. Д. И хотели бы отправлять новые запросы на обслуживание этого продукта, чтобы наша команда не дублировала ввод данных.

Контекст A: В этой базе данных хранится информация запроса на обслуживание. Это сторонняя БД, и мы не можем вносить изменения в структуру этой БД, поскольку это может привести к непреднамеренным, не поддерживаемым последствиям в последующем.

Контекст B: Эти данные хранят данные «журнала» запросов на обслуживание, которые были обработаны. Моя команда и я полностью контролируем структуру этой БД и т. Д. Необработанные запросы на обслуживание должны попасть в эту БД, а другой процесс определит, что она не обрабатывается, и отправит запись в продукт SaaS.

Это запрос, который я хочу изменить. Сначала я смог создать! List.Contains (c.swHDCaseId), но он не может обработать более 2100 элементов. Есть ли способ добавить объединение в другой контекст?

var query = (from c in contextA.Cases
             where monitoredInboxList.Contains(c.INBOXES.inboxName)
             //right join d in contextB.CaseLog on d.ID = c.ID....
             select new
             {
                 //setup fields here...
             });

Ответы [ 3 ]

5 голосов
/ 24 марта 2010

вы можете попробовать использовать команду GetTable . Я думаю, что это сначала загружает все данные contextB.TableB, но не уверен на 100%. У меня не настроена среда, в которой можно поиграть или проверить это, поэтому дайте мне знать, если это работает =)

from a in contextA.TableA
join b in contextB.GetTable<TableB>() on a.id equals b.id
select new { a, b }
2 голосов
/ 24 марта 2010

Лучше всего, за исключением решений для баз данных, присоединиться с помощью LINQ (к объектам) после выполнения.

Я понимаю, что это не то решение, на которое вы надеялись. По крайней мере, на этом уровне вам не придется беспокоиться об ограничении списка IN (.Contains)

Edit: вне решений для баз данных выше действительно указывает на связанные серверные решения, где вы позволяете таблице / представлению из контекста A существовать в базе данных из контекста B.

0 голосов
/ 24 марта 2010

Если вы не можете извлечь две таблицы в объекты List и затем объединить их, вам, вероятно, придется что-то делать на стороне базы данных. Я бы рекомендовал создать связанный сервер и просмотреть сервер БД, которым вы управляете. Затем вы можете выполнить объединение в представлении, и у вас будет очень простой запрос LINQ, чтобы просто получить представление. Я не уверен, каким образом LINQtoSQL может объединить 2 контекста данных, указывающих на 2 разных сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...