Как я могу использовать два разных контекста данных в одном запросе LINQ? - PullRequest
4 голосов
/ 10 августа 2010

Может ли кто-нибудь помочь мне в следующем: как я могу использовать два разных контекста данных в одном запросе LINQ?

using (var db = new DataMapDataContext(Connection))
        {    
            using (var dbAdd = new DataMapDataContext(ConnectionAdd))
            {
                return (from i in dbAdd.ITEMs
                        join p in db.U_OTT_PINs on i.ITEMNO equals p.PIN_CODE
                        where p.PIN_TYPE == Utils.PinItem
                        select ...
            }
        }

Возможно ли это?

UPDATE:

Я решил свою проблему, но не с другими контекстами данных:

        var listPinnedItems = new List<string>();
        using (var db = new DataMapDataContext(Connection))
        {
            listPinnedItems = (from lpi in db.U_OTT_PINs
                               where lpi.PIN_TYPE == Utils.PinItem
                               select lpi.PIN_CODE).ToList();
        }

        using (var dbAdd = new DataMapDataContext(ConnectionAdd))
        {
            return (from i in dbAdd.ITEMs
                    where listPinnedItems.Contains(i.ITEMNO) 
                    ...

Ответы [ 4 ]

4 голосов
/ 10 августа 2010

Боюсь, LINQ to SQL не предназначен для запросов к различным базам данных.См. Ниже возможный обходной путь?

http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/3a15002c-704d-49f9-a8cc-0d2bde186e1d

3 голосов
/ 10 августа 2010

Я не верю, что эти два разных контекста могут участвовать в разных транзакциях в одной и той же базе данных или даже в совершенно разных экземплярах базы данных.Как бы он сконструировал SQL для совместной работы?

Если бы вы могли объяснить, что вы пытаетесь сделать, мы могли бы помочь вам больше.

0 голосов
/ 10 августа 2010

Это один из тех вопросов, на которые нельзя ответить, предварительно не спросив " Чего вы пытаетесь достичь? ".

Обе ли эти строки данных указывают на одну и ту же базу данных или разные?базы данных?

Если они соединяются с одной и той же базой данных, и единственная причина, по которой у вас их две, состоит в том, что вы разделили свои сущности, то вы можете использовать только один DC для запроса таблицы, которая «принадлежит» другому текстовому тексту.Просто используйте GetTable, и L2S разрешит сопоставления на основе атрибутов класса и члена.

Если они указывают на разные базы данных на одном сервере и имя входа, которое вы подключаете к одной из БД, у которой есть права на чтение изво второй БД вы можете включить таблицу из одной базы данных в текстовый текст на основе другой базы данных, просто добавив имя базы данных в качестве префикса в файл .dbml.

0 голосов
/ 10 августа 2010

Можно использовать два набора данных, но вы не можете одновременно выполнять запросы к базе данных.Однако вы можете получить данные, участвующие в обоих запросах, и запросить объекты, используя общие операторы linq (linq2objects).

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