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


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

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

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

SELECT FROM [MyDatabase.dbo].[MyTable]

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

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

(Обратите внимание на два ]].)

2 6

2 ответа:

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

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

Как далеко в качестве того, что нужно изменить в EDMX, найдите атрибут схемы узла EntitySet в разделе "содержимое SSDL".

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

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

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

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