EF4 кросс-отношения базы данных - PullRequest
7 голосов
/ 27 апреля 2010

Мне было интересно, поддерживают ли EF4 отношения между базами данных? Например:

DB1

Author
  Id
  Name

db2

Posts
  Id
  Content
  db1.Author.Id

Что в идеале мне нужно сделать, чтобы получить это отношение в моей модели ef4?

Ребята, у вас есть идеи?

Спасибо

Ответы [ 3 ]

5 голосов
/ 10 мая 2010

Я нашел эту запись в Microsoft Connect , которая отвечает на вопрос о поддержке, оказанной в данный момент EF (на самом деле она еще не поддерживается).

Также найдено ветка в социальной сети MSDN об этой проблеме.

Другие ссылки на переполнение стека:

Таким образом, единственными возможными альтернативами являются:

  1. Использование представлений в EF

  2. Вместо этого используйте NHibernate

4 голосов
/ 27 мая 2011

Если ваша база данных поддерживает синонимы, вы можете обмануть EF, чтобы охватить несколько баз данных. Я написал, как это сделать здесь .

В основном вы получаете файл edmx для каждой базы данных и скрипт, который объединяет их в один файл edmx. Синонимы используются для ссылки на одну базу данных из другой с использованием фактического имени таблицы, поэтому EF не выбрасывает соответствие при попытке доступа к database2.table из database1. В модели EF все еще необходимо настроить связи между двумя базами данных вручную, но после настройки они останутся даже при повторном запуске сценария слияния.

Скрипты для настройки синонимов и объединения файлов edmx размещены в ссылке

3 голосов
/ 03 мая 2010

Я недавно начал проект, который использует инфраструктуру сущностей с двумя базами данных, одной Oracle и одним SQL Server. Я не смог найти какую-либо информацию о кросс-базе данных или поддержке нескольких баз данных в структуре объекта.

Большинство постов из команды MS Entity Framework имеют пару лет и указывают, что включение двух баз данных в одну модель не является функцией, которая будет включена в ближайшее время. Мне было бы интересно получить конкретный ответ о том, был ли он включен в 2010 году, хотя я подозреваю, что ответ - нет.

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

В тех случаях, когда нам нужно было запрашивать данные из двух баз данных одновременно, мы просто создавали представление в одной или другой базе данных. Поскольку мы используем Oracle и SQL Server, это представление будет использовать либо связанный сервер (SQL), либо DBLink (Oracle).

Недостатком представлений в структуре сущностей является то, что нам пришлось потратить больше времени, чем я ожидал, чтобы заработали первичные ключи.

Надеюсь, это поможет.

...