ADO.Net Entity Framework для нескольких баз данных - PullRequest
6 голосов
/ 04 марта 2009

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

Есть ли способ достичь этого в Linq 2 Entities / ADO.net Entity Framework? Можно ли где-нибудь добавить имя базы данных к имени таблицы?

Я пытался изменить 'Schema' с dbo на MyDatabase.dbo , но EF инкапсулирует это в

SELECT FROM [MyDatabase.dbo].[MyTable]

Хитрость, подобная изменению 'Schema' на 'MyDatabase]. [Dbo' будет экранирована в

SELECT FROM [MyDatabase]].[dbo].[MyTable]

(Помните о двух ]].)

Ответы [ 2 ]

8 голосов
/ 04 марта 2009

Во-первых, это официально не поддерживается .

Ответ, на который вы ссылаетесь для LINQ to SQL, просто использует способность сервера БД выполнять неоднородные запросы. Я не понимаю, почему это не сработало бы для Entity Framework, так как это функция сервера БД, а не функция обеих платформ. Другими словами, LINQ to SQL по-прежнему работает с соединением, как если бы был задействован только один сервер базы данных. Имейте в виду, однако, что не все серверы БД могут делать это.

Что касается изменений в EDMX, найдите атрибут Schema узла EntitySet в разделе «Содержимое SSDL».

Одно предостережение об этой технике заключается в том, что при обновлении модели из базы данных модель хранилища стирается и заменяется с нуля. Таким образом, вам нужно будет повторно применить эти изменения. Это не проблема в LINQ to SQL, поскольку LINQ to SQL вообще не поддерживает автоматическое обновление из базы данных.

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

1 голос
/ 23 мая 2011

Если ваша база данных поддерживает синонимы SQL, вы можете объединить два определения базы данных в один файл. Я сделал это недавно и опубликовал, как я это сделал здесь , если вам интересно.

В основном вы создаете синонимы для базы данных A, указывающие на базу данных B, создаете отдельный файл edmx для каждой базы данных, а затем запускаете сценарий для объединения файлов edmx в один файл, который подключается к любой базе данных, для которой настроены синонимы.

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