Подтвердить что ты не робот

Комбинированные ключи DB с Entity Framework 4.0

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

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

Согласно Джереми Миллер, "Композитный ключ делает любое сопоставление объектов и реляций и упорство в целом сложнее". но он действительно не говорит, почему. Является ли это ссылкой на то, как Entity Framework 4.0 обрабатывает ключи?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Удачи!