Могу ли я получить Entity Framework (сначала модель) для генерации составных ключей? - PullRequest
2 голосов
/ 10 марта 2011

Я проектирую базу данных с использованием подхода Entity Framework «сначала модель».Основываясь на превосходной обратной связи, которую я получил здесь, я принимаю шаблон супертипа / подтипа для части БД.

Для этого шаблона требуются составные ключи, основанные как минимум на 2 столбцах2 таблицы (см. Схему ниже).

Я искал на форуме слова "каркас сущностей" и "составные ключи", но ни один из вопросов, которые я нашел, не был на этом более базовом уровне: могу ли я установитьмодель сущностей, чтобы она генерировала одну таблицу (используя «Создать базу данных из модели ...») с составным первичным ключом на 2 столбца, так что один является внешним ключом для второй таблицы?А в другой таблице та же ситуация, за исключением того, что FK основан на 2 столбцах первой таблицы?

ИЛИ, лучше ли просто позволить EF генерировать БД без составных ключей, а затем перейти к SQLСервер, (заново) установить первичные ключи, удалить модель и создать новую модель на основе вновь созданной базы данных?Я знаю, как это сделать, конечно;но поскольку я все еще прорабатываю незначительную деталь или 2 в структуре БД, я бы предпочел отложить все, что по существу приводит к запеканию в структуре БД на данный момент.

Вот рекомендуемый суперструктура типа / подтипа, которую я отразил в моей модели сущности (пока не выясняя, как генерировать составные ключи):

CREATE TABLE publications (
  pub_id INTEGER NOT NULL PRIMARY KEY,
  pub_type CHAR(1) CHECK (pub_type IN ('A', 'B', 'P', 'S')),
  pub_url VARCHAR(64) NOT NULL UNIQUE,
  CONSTRAINT publications_superkey UNIQUE (pub_id, pub_type)
);


CREATE TABLE articles (
  pub_id INTEGER NOT NULL,
  pub_type CHAR(1) DEFAULT 'A' CHECK (pub_type = 'A'),
  placeholder CHAR(1) NOT NULL, -- placeholder for other attributes of articles
  PRIMARY KEY (pub_id, pub_type),
  FOREIGN KEY (pub_id, pub_type) REFERENCES publications (pub_id, pub_type)
);

CREATE TABLE stories (
  pub_id INTEGER NOT NULL,
  pub_type CHAR(1) DEFAULT 'S' CHECK (pub_type = 'S'),
  placeholder CHAR(1) NOT NULL, -- placeholder for other attributes of stories
  PRIMARY KEY (pub_id, pub_type),
  FOREIGN KEY (pub_id, pub_type) REFERENCES publications (pub_id, pub_type)
);

1 Ответ

3 голосов
/ 10 марта 2011

Я не пробовал, но я думаю, что вы не сможете сначала создать это с моделью. Причина в том, что ваша первая таблица использует ограничение Unique, а вторая и третья таблицы строят FK на основе этого ограничения. Entity Framework не поддерживает уникальные ограничения, поэтому я предполагаю, что он не сможет сгенерировать эту схему БД. Но нет ничего проще, чем просто попробовать.

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