Entity Framework 4 — используйте одну таблицу сопоставления для всех отношений «многие ко многим»

Я хотел бы отобразить все отношения «многие к маю» через одну таблицу в моей базе данных. Это означает, что у меня есть множество таблиц (сущностей), которые имеют различные отношения «многие ко многим». Вместо того, чтобы иметь отдельную таблицу сопоставления для каждого отношения, я хотел бы использовать одну таблицу «основного сопоставления», имеющую столбцы: End1Id и End2Id.

Не спрашивайте, почему ;) Это требуется моему клиенту...

Как мне настроить это в дизайнере моделей, или мне нужно напрямую редактировать edmx xml... или это просто невозможно?

Спасибо за вашу помощь!


person SolarX    schedule 22.02.2011    source источник
comment
Я бы вернулся к вашему клиенту и спросил, почему - это не очень хороший дизайн данных.   -  person Paddy    schedule 22.02.2011
comment
Это хреновое требование...   -  person Ladislav Mrnka    schedule 22.02.2011


Ответы (2)


В таком сценарии у вас не может быть явных внешних ключей, потому что такая таблица обычно имеет как минимум три строки:

  1. ПК таблицы 1
  2. ПК таблицы 2
  3. Тип сопоставления, указывающий, какие именно таблицы использовать.

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

person Daniel Hilgarth    schedule 22.02.2011
comment
Спасибо за ваш ответ. Я знаю, что я не могу использовать внешний ключ в этом сценарии. Но я хочу иметь отношения в модели EF, чтобы мне не приходилось присоединяться вручную. Нет ли способа отредактировать файл edmx, чтобы согнуть все отношения в одну и ту же таблицу? - person SolarX; 22.02.2011

Вам нужно будет установить эту таблицу Master Mappings вручную. Дизайнер не делает это за вас автоматически.

Однако, если вам нужны денормализованные объекты, лучше иметь их денормализованными на уровне БД, а не на уровне EF/кода.

person sajoshi    schedule 22.02.2011
comment
Мы пытаемся создать гибридную структуру данных. У нас есть сущности с отношениями во время разработки. В дополнение к этому у нас есть таблица ассоциаций, которая определяет динамические отношения между сущностями. Эти дополнительные отношения могут быть настроены во время выполнения и не требуют развертывания новой версии программного обеспечения. Эти отношения, очевидно, используют ОДНУ таблицу сопоставления, и все они являются многими ко многим (не беспокойтесь о количестве элементов!). Чтобы унифицировать модель, я хотел бы использовать эту таблицу сопоставления даже для разработанных отношений. - person SolarX; 22.02.2011