сопоставления свойств в Entity Framework без ПК? - PullRequest
0 голосов
/ 21 июля 2011

Я попытался создать EF-модель (VS2010, .NET4) с 3 таблицами, каждая таблица с PK называется Sync_ID.

TABLE_HEAD: (Sync_ID (PK), GRID_ID int, SERIALNUMBER int, YEARint)

TABLE_POINT: (Sync_ID (PK), GRID_ID int, SERIALNUMBER int, YEAR int, POINT_NUMBER int)

TABLE_PLANT: (Sync_ID (PK), GRID_ID int, SERIALNUMBER int, YEAR int, POINT_NUMBER int, PLANT_NUMBER int)

Ассоциации: TABLE_HEAD "1 ко многим" TABLE_POINT "1 ко многим" TABLE_PLANT

Как видите, GRID_ID, SERIALNUMBER, ГОД TABLE_HEAD должны быть сопоставленыGRID_ID, SERIALNUMBER, YEAR из TABLE_POINT

И GRID_ID, SERIALNUMBER, YEAR из TABLE_POINT должны быть сопоставлены с GRID_ID, SERIALNUMBER, YEAR, POINT_NUMBER

Моим первым подходом было использование YID GRID для группы GRID_как PK, но это было бы нарушением Условия.

Таким образом, единственный способ - использовать Sync_ID в качестве PK.Но как можно сопоставить другое поле, как описано выше?Могу ли я только сопоставить PK_Columns?

Надеюсь, у вас есть идеи, чтобы помочь мне.Другие подходы тоже приветствуются.С наилучшими пожеланиями!

1 Ответ

0 голосов
/ 21 июля 2011

Другой подход - создать правильную структуру базы данных !!!

У вас есть Sync_ID в качестве PK, поэтому используйте его как FK в зависимой сущности вместо того, чтобы создавать беспорядок, который вы описали.Это не имеет ничего общего с правильной архитектурой БД.Задача реляционной базы данных - минимизировать дублирование данных, но вы копируете почти все свои данные из первой таблицы во все зависимые таблицы.Более того:

  • Если TABLE_HEAD не имеет уникального индекса для GRID_ID, SERIALNUMBER, YEAR, он не может быть главной сущностью отношения один-ко-многим
  • Дажеесли он имеет уникальный индекс, это не имеет значения, потому что EF еще не поддерживает уникальные индексы, поэтому он должен быть первичным ключом для участия в качестве основного объекта в ассоциации

Вы должны прочитать кое-что о нормализации базы данных.

...