Составные ключи БД с Entity Framework 4.0 - PullRequest
12 голосов
/ 18 декабря 2009

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

Забывая о влиянии на производительность, это вызовет какие-либо трудности при работе с этим БД в Entity Framework 4.0? Структура базы данных вряд ли изменится, и я не ищу «философских» дебатов, но каковы практические последствия?

Согласно Джереми Миллеру , «составной ключ делает любой вид объектно-реляционного отображения и стойкости в целом сложнее» но он на самом деле не говорит, почему. Относится ли это к тому, как Entity Framework 4.0 обрабатывает ключи?

Ответы [ 2 ]

13 голосов
/ 18 декабря 2009

Нет, EF4 прекрасно поддерживает составные ключи.

Проблема в таблице с суррогатным ключом и составным ключом. Вы можете установить только один ключ для каждой модели; этот ключ может иметь несколько полей, но вы можете иметь только одно с точки зрения дизайнера. Не уверен насчет ручного редактирования XML или сопоставления только кода.

Вы можете установить поле в качестве идентификатора, а не ключа, если вам нужен составной и суррогатный ключ для одной и той же таблицы. Поле Identity (Id) не будет использоваться ObjectContext или ObjectStateTracker, но будет увеличиваться и, тем не менее, отлично справляться.

8 голосов
/ 12 октября 2010

У меня были проблемы с EF4 и составными ключами. Он не поддерживает использование столбцов в качестве компонентов в нескольких ключах в таблице соединений.

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

Ошибка 3021: проблема в отображении фрагменты ...: каждый из следующих столбцы в таблице PageView отображается на несколько концептуальных побочных свойств: PageView.Version отображается на (PageView_Association.View.Version, PageView_Association.Page.Version)

Единственный способ обойти это - продублировать столбец, что лишает цели его наличия вообще.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...