LINQ по нескольким базам данных

голоса
35

У меня есть две таблицы, которые должны быть соединены с помощью LINQ, но они живут в разных базах данных. Сейчас я возвращаюсь результаты одной таблицы, затем циклически и получение результатов другого, который, как вы можете догадаться, это не очень эффективно. Есть ли способ, чтобы получить их в одном операторе LINQ? Есть ли другой способ, чтобы построить это, чтобы избежать зацикливания? Я просто ищу идеи, в случае, если я что-то вид.

Обратите внимание, что я не могу изменить базы данных, то есть я не могу создать представление в одном, который ссылается на другой. Что-то я еще не пробовал создают мнения в третьей базе данных, которая ссылается на обе таблицы. Любые идеи приветствуются.

Задан 09/12/2008 в 15:43
источник пользователем
На других языках...                            


3 ответов

голоса
39

Вы можете сделать это, даже на серверах, до тех пор , как вы можете получить доступ к одной базе данных с другой. То есть, если это возможно , чтобы написать SQL заявление против ServerA . DatabaseA , который обращается к ServerB . DatabaseB . схема . TableWhatever , то вы можете сделать то же самое в LINQ.

Чтобы сделать это, вам нужно отредактировать файл .dbml вручную. Вы можете сделать это в VS 2008 легко , как это: Щелкните правой кнопкой мыши, выберите Открыть с помощью ... и выберите Редактор XML .

Посмотрите на подключение элемента, который должен быть в верхней части файла. Что вам нужно сделать , это предоставить явное имя базы данных (и имя сервера, если они отличаются) для таблиц не в базе данных указали на эту строке соединения.

Открывающий тег для таблицы элементов в вашем .dbml выглядит следующим образом :

<Table Name="dbo.Customers" Member="Customers">

Что вам нужно сделать , это для любой таблицы не в базе данных строки подключения, измените это Имя атрибут к чему - то , как один из них:

<Table Name="SomeOtherDatabase.dbo.Customers" Member="Customers">
<Table Name="SomeOtherServer.SomeOtherDatabase.dbo.Customers" Member="Customers">

Если у вас возникли проблемы, убедитесь, что другая база данных (или сервер) действительно доступен из исходной базы данных (или сервера). В среде SQL Server Management Studio, попробуйте написать небольшое заявление SQL работает против вашей исходной базы данных, что делает что-то вроде этого:

SELECT SomeColumn
FROM OtherServer.OtherDatabase.dbo.SomeTable

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

Ответил 09/12/2008 в 16:24
источник пользователем

голоса
6

Создание ргоса / представления в базе данных.

Ответил 09/12/2008 в 16:04
источник пользователем

голоса
0

Учитывая ваши условия, я не думаю, что вы можете сделать это в одном заявлении Linq. Но вы можете присоединиться результаты ваших L2S запросов в Linq к объектам запроса.

Ответил 09/12/2008 в 16:11
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more