Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос на разные базы, невозможно? 
:(
    Опции темы
namespace
  Дата 16.5.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.7.2006

Репутация: нет
Всего: нет



имеется два SQL to LINQ класса, т.к. нужны две базы
сделал запрос:
Код

            var temp =
                from s in reestrDataContext.SB
                join c in reestrDataContext.CR
                    on new { s.rid, s.sid } equals new { c.rid, c.sid }
                join g in reportDataContext.GroupingCategories
                    on c.cid equals g.cid
                group g by g.GroupID into grouping
                select new
                {
                    GroupID = grouping.Key,
                    Count = grouping.Count()
                };

и получил следующую ошибку:
"The query contains references to items defined on a different data context."

неужели LINQ неможет производить запрос из разных DataContext?

P.S. одно дело если разные сервера, а тут то один
неужели придется делить на два запроса а потом их сравнивать в памяти - это как то неправильно, а если данных в обоих запросах много ?


Это сообщение отредактировал(а) namespace - 16.5.2008, 15:34
PM MAIL   Вверх
Idsa
Дата 9.6.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



Цитата(namespace @  16.5.2008,  15:16 Найти цитируемый пост)
неужели LINQ неможет производить запрос из разных DataContext?

Не умеет.

Цитата(namespace @  16.5.2008,  15:16 Найти цитируемый пост)
P.S. одно дело если разные сервера, а тут то один

Connection создается не к серверу, а к базе. Так что, насколько я понимаю, в данном контексте не имеет значения, находятся ли базы на одном сервере или нет.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
akizelokro
Дата 9.6.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



Есть не очень быстрый путь решения задачи. Создаешь синоним (если БД поддерживает возможность) на таблицу в другой схеме.
Дизайнер Linq с синонимами не работает  (не поленился, попробовал). Что не очень приятно, но что поделать.
Создаешь класс для необходимой таблицы (можно попробовать перетянуть из другого DataContext'а или sqlmetal.exe или ручками), а потом

Код

partial class NorthWindDataContext
{
  public IEnumerable<ТвойКласс> GetLeftTable()
  {
    return ExecuteQuery<ТвойКласс>(@"SELECT....
}



должно сработать



--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Idsa
Дата 9.6.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



akizelokro, безусловно, при помощи ExecuteQuery и настроек самого Sql Server'а можно работать с двумя базами... Но если необходимо работать с несколькими базами не в одном методе, а во всем DAL'е, то ExecuteQuery - не лучший выбор и тогда проще отказаться от LINQ'а и использовать старый-добрый ADO.NET.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
akizelokro
Дата 9.6.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



Рискну поправить, что пределы одного метода не такая уж жесткая граница. Вообщем же согласен, трудозатраты по коду при более интенсивной работе с "левой" таблицей представляются слишком большими. 
Кстати, Linq to DataSet может работать на разных датасетах в одном запросе, не в курсе?


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Idsa
Дата 9.6.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



Цитата(akizelokro @  9.6.2008,  21:29 Найти цитируемый пост)
Рискну поправить, что пределы одного метода не такая уж жесткая граница.

Имелся в виду классический DAL, где каждый метод - не более чем реализация CRUD операции.

Цитата(akizelokro @  9.6.2008,  21:29 Найти цитируемый пост)
Кстати, Linq to DataSet может работать на разных датасетах в одном запросе, не в курсе? 

Не пробовал, но уверен, что да. Ведь по сути Linq to DataSet - это тот же LinqToObjects... просто используется пара приемов для типизации датасетов.




--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
akizelokro
Дата 9.6.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: нет
Всего: 5



Цитата

Имелся в виду классический DAL, где каждый метод - не более чем реализация CRUD операции.

Не уверен, что в таком случае в предложенном варианте будет хотя бы один CRUD метод (если я правильно понимаю определение) smile 


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
Idsa
Дата 9.6.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



Цитата(akizelokro @  9.6.2008,  21:48 Найти цитируемый пост)
Не уверен, что в таком случае в предложенном варианте будет хотя бы один CRUD метод (если я правильно понимаю определение) smile  

Да уж. Запросик на выборку в первом посте неслабый smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0671 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.