ADO.Net Entity Framework для нескольких баз данных

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

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

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

SELECT FROM [MyDatabase.dbo].[MyTable]

Хитрость, например, смена схемы на MyDatabase.[Dbo] будет экранирована в

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

(Имейте в виду два ]].)

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам