2

Entity Framework の「モデル優先」アプローチを使用してデータベースを設計しています。ここで受け取った優れたフィードバックに基づいて、DB の一部にスーパータイプ/サブタイプのパターンを採用しています。

このパターンには、少なくとも 2 つのテーブルの 2 つの列に基づく複合キーが必要です (以下のスキーマを参照)。

フォーラムで「エンティティ フレームワーク」と「複合キー」を検索しましたが、見つけた質問のどれも、このより基本的なレベルに関するものではありませんでした: 1 つのテーブルを生成するようにエンティティ モデルを設定できますか (「データベースの生成」を使用) from Model...") 2 つの列に複合主キーを使用して、1 つが 2 番目のテーブルの外部キーになるようにしますか? 別のテーブルでは、FK を除いて同じ状況が最初のテーブルの 2 つの列に基づいていますか?

または、複合キーを使用せずに EF に DB を生成させてから、SQL Server に移動し、主キーを (再) 設定し、モデルを削除して、新しくインスタンス化されたデータベースに基づいて新しいモデルを作成する方がよいでしょうか? もちろん、その方法は知っています。しかし、私はまだ DB 構造の細部を 1 つまたは 2 つ検討しているので、この時点で DB 構造を本質的に焼き付けることになるものはすべて延期したいと思います。

推奨されるスーパータイプ/サブタイプの構造を次に示します。これは、エンティティ モデルに反映されています (複合キーを生成する方法はまだわかっていません)。

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)
);
4

1 に答える 1

3

私は試していませんが、最初にモデルでこれを作成することはできないと思います。その理由は、最初のテーブルが Unique 制約を使用しており、2 番目と 3 番目のテーブルがその制約に基づいて FK を構築しているためです。Entity Framework は Unique 制約をサポートしていないため、この DB スキーマを生成できないと思います。しかし、単純に試してみることほど簡単なことはありません。

于 2011-03-10T15:27:24.093 に答える