Entity Framework 4 - Ассоциации - PullRequest
       32

Entity Framework 4 - Ассоциации

0 голосов
/ 08 декабря 2010

EF 4 не поддерживает ассоциации, которые не основаны на внешних / первичных ключах. Есть много случаев, когда вам нужно перемещаться между таблицами, используя неключевые поля.

Например, таблица лекарств имеет:

medID (PK)
medGrouperID
medName

таблица ингредиентов имеет:

ingredientID (PK)
ingredientName

и таблица ссылок имеет:

medGrouperIDID (PK)
ingredientID (PK)

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

Я давно не занимался разработкой БД, поэтому я пытаюсь понять это ограничение; Это следующий хороший дизайн базы данных или сбой EF?

РЕДАКТИРОВАТЬ
MedGrouperID позволяет группировать все лекарства с одинаковыми ингредиентами, применениями, инструкциями и т. Д. Это устраняет дублирование данных, которое существовало бы, если бы у каждого лекарства был свой собственный набор записей для ингредиентов, видов использования и т. Д.

Добавление новой таблицы MedGrouper будет работать, но для этого потребуется дополнительное объединение, которое не может сказаться на производительности.

Медикаменты

* MedID (PK)
* MedGrouperID (FK)
* MedName

MedGrouper * MedID (FK) * MedGrouperID (PK)

Ингредиент

* IngredientID (PK)
* IngrediantName

MedicationIngredients (таблица соединения / соединения)

* MedGrouperID (PK, FK)
* IngredientID (PK, FK)

/ EDIT

1 Ответ

1 голос
/ 08 декабря 2010

Это следующий хороший дизайн базы данных или сбой EF?

Это не сбой EF, это неправильный дизайн базы данных (извините за тупое). Этот дизайн не будет работать с точки зрения чисто запросов к базам данных, поэтому вы не можете ожидать, что EF также сработает.

Похоже, у вас есть *..* между лекарствами и ингредиентами .

Поэтому у вас должны быть следующие таблицы:

Медикаменты

  • MedID (PK)
  • MedGrouperID
  • MedName

Ингредиент

  • IngredientID ( ПК )
  • IngrediantName

MedicationIngredients (таблица соединения / соединения)

  • MedID ( PK , FK )
  • IngredientID ( PK , FK )

Если вы сгенерируете модель из этой модели с использованием Entity Framework, EF создаст две сущности с присутствующей ассоциацией «многие ко многим», и таблица соединения не должна будет отображаться вообще.

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

НТН.

...