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

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

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

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

ИЛИ, лучше ли просто позволить EF генерировать БД без составных ключей, затем перейти на SQL Server, (повторно) установить первичные ключи, удалить модель и создать новую модель на основе вновь созданной базы данных? Я знаю, как это сделать, конечно; но так как я все еще прорабатываю незначительную деталь или 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 ответ

Решение

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

Другие вопросы по тегам