2009-03-04 2 views
6

In Linq2Sql you can connect a data context to multiple databases by just adding the database name to the source.ADO.Net Entity Framework для нескольких баз данных

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

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

SELECT FROM [MyDatabase.dbo].[MyTable] 

Trickery как изменение 'схемы' в 'MyDatabase]. [DBO' будут экранированы в

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

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

ответ

8

Во-первых, this isn't officially supported.

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

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

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

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

+0

Вид Работает только хорошо, если каждый бит находится на одном сервере базы данных, иначе вы перейдете на перекрестку db. В sql 2005+ я считаю, что синоним может работать, но я не 100%. Что касается изменений, которые были потеряны, если вы прекратили использовать дизайн и отредактировали четыре файла вручную, это перестает быть проблемой. – NikolaiDante

+0

Я попытался изменить атрибут Schema из dbo в, например, OtherDatabase.dbo, безрезультатно. После этих изменений запросы вызывают исключение «недопустимое имя объекта OtherDatabase.dbo.MyTable». – Sam

+0

Nath, вам нужно будет использовать связанный сервер (с EF или LINQ-to-SQL), если на другом сервере. Сэм, попробуйте подход VIEW. –

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^