Entity Framework: соединительные таблицы с собственными первичными ключами - PullRequest
1 голос
/ 19 марта 2012

currently В настоящее время я работаю над проектом ASP NET MVC.Мы используем Entity Framework и следуем подходу Database First.База данных уже существует.База данных была создана с использованием соглашения, согласно которому каждая таблица имеет указанный единственный первичный ключ, даже если это таблица соединений.

Пример:

  • Пользователь таблицы:UserId (PK);Имя пользователя

  • Таблица UserRole: UserRoleId (PK);UserId (FK);RoleId (FK)

  • Таблица Роль: RoleId (PK);Rolename

Как уже говорилось, база данных уже существует, и это соглашение не подлежит обсуждению.Когда я хочу создать Entity Data Model в Visual Studio, у меня также есть три Entity.Но было бы разумно иметь только две сущности: пользователя и роль.Сущность UserRole не имеет смысла.

Есть ли возможность повлиять на то, как Entity Framework отображает мои таблицы, чтобы я мог избавиться от этих реляционных (бесполезных) сущностей?

1 Ответ

1 голос
/ 19 марта 2012

Могу ли я повлиять на то, как Entity Framework сопоставляет мои таблицы, чтобы я мог избавиться от этих реляционных (бесполезных) лица?

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

Единственный способ избежать этого - отказаться от поддержки инструментов и использовать либо сопоставление кода, либо вручную написать файл EDMX и не сообщать EF об этом дополнительном ключе. Вместо этого позвольте EF поверить, что есть только те два FK, которые формируют составные PK, как и ожидалось из таблицы соединений. Очевидно, что если ваша база данных требует специальных возможностей, предоставляемых отдельным ПК, вы не сможете этого сделать.

...