[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]
このトピックでは、概念モデル、Entity Data Model (EDM) に変更して (TPH) の継承の階層ごとのテーブルを実装する方法を示します。 動的データ Entity Framework プロジェクトで、TPH の継承モデルが使用されます。 TPH の継承では、1 つのデータベース表、継承階層内のすべてのエンティティ型のデータを維持を使用してください。 単一テーブルの継承でとも呼ばれます。 EDM の継承を実装する方法については、Inheritance を参照してください。 動的データで継承を使用する方法については、ASP.NET Dynamic Data のインフラストラクチャ を参照してください。
このチュートリアルでは、学校のサンプル データベースから生成される EDM を変更して TPH 継承実装します。 学校のサンプル データベースの EDM で Person エンティティの種類には 2 つのプロパティ、し、 HireDate EnrollmentDate があります。 これらのプロパティは、エンティティの新しい型 (Instructor と Student) Person から継承されたに属していることができます。
このチュートリアルでは、次の手順を使用して TPH 継承を実装します。
Person から派生する 2 つの新しいエンティティ種類を作成します。
Person エンティティのサブタイプ エンティティをからには各サブタイプに固有のプロパティを移動します。
特定のプロパティ サブタイプに対する制約を設定します。
抽象型の入力 Person エンティティを作成します。
サブタイプ特定のフィールドの条件を使用して、Person テーブルには、各エンティティのサブタイプがマップされます。
このチュートリアルを完了させるには、次の操作が必要です。
Microsoft Visual Studio 2010 またはそれ以降のバージョン。
学校のサンプル データベースです。 Microsoft SQL Server 2008 はこのデータベースのバージョン、CodePlex サイトからダウンロードできますか Transact-SQL スクリプトを使ってを作成できます。 詳細については、「Creating the School Sample Database」を参照してください。
学校のサンプル データベースを使用する動的データ エンティティの Web サイト。 このサンプルは School.edmx です、ADO.NET エンティティ データ モード (EDM) ファイルの名前と仮定します。
このチュートリアルではであると見なす ASP.NET の動的なデータ操作に慣れて。 詳細については、「>ASP.NET Dynamic Data の概要」を参照してください。
開始するは TPH の継承を実装する SchoolModel EDM の概念の部分を変更します。 2 つのエンティティ、Student Instructor を追加します。 両方のエンティティは、Person エンティティによって継承します。 Student エンティティに対して一意されるプロパティは Person エンティティに Student エンティティから移動されます。 Instructor エンティティに対して一意されるプロパティは Person エンティティに Instructor エンティティから移動されます。 Person エンティティには、両方の継承されたエンティティに共通のプロパティです。
次の手順に従って新しいエンティティを追加する方法について説明するビデオを参照してください。 Watch.
新しいエンティティを追加するには
学校のサンプル データベースを使用する動的なデータ Web プロジェクトを開き、ADO.NET エンティティ データ モード (EDM) ファイルとして School.edmx ファイルを含みます。
のソリューション エクスプローラー] で School.edmx ファイルをダブルクリックします。
ADO.NET エンティティ データ モデル デザイナー (エンティティ デザイナー) では、School.edmx ファイルが開きます。
エンティティ デザイナーのデザイン サーフェイスに空の領域を右クリックして を追加] をポイントして [エンティティ をクリックします。
エンティティの追加 の] ダイアログ ボックスが表示されます。 次の図には、エンティティの追加に使用されるの UI 示しています。
次の図は、エンティティの追加 ダイアログ ボックスです。
講師用 エンティティ名 を入力します。
From the Base type list,select Person.
[OK] をクリックします。
次に作成され、デザイン サーフェイスに表示される新しいエンティティの種類を示します。
前の 3 つ手順を繰り返してが入力受講者用 エンティティ名。
新しいエンティティと 2 種類、講師用の 受講者用 はデザイン サーフェイスに表示します。 新しいエンティティ型から 人 エンティティの種類をポイントして矢印します。 ユーザー その が、新しいエンティティの種類の基本型をこのを示します。
のスカラー プロパティ、 HireDate エンティティの種類の Person プロパティを右クリックし、 をカットしています。
エンティティ型のスカラー プロパティ Instructor を右クリックし、 の貼り付けを実行します。
HireDate プロパティを右クリックし、 のプロパティを [します。
[プロパティ] ウィンドウで、Nullable プロパティを false に設定します。
前の 4 つ手順を繰り返してが EnrollmentDate エンティティの種類の Person プロパティを切り取りし、 Student エンティティの種類に貼り付けます。
Person エンティティ タイプを選択します。
プロパティ ウィンドウでに Abstract Person エンティティの種類の true プロパティを設定します。
抽象型はその型のすべての既存関数マッピングを削除すると、エンティティの種類を定義することを示すメッセージが表示されます。
[OK] をクリックします。
メモ |
|---|
モデル TPH のシナリオを抽象型を使用する必要はありません。 抽象型を使用この例では、EDM の用途を説明します。 |
Instructor Student エンティティ、今すぐ Person エンティティにマップされます。 教官は、雇用が登録はできません。 したがって、入社日できない null 条件が追加されます。 受講者は採用しない;登録します。 したがって、条件の登録日付 null ができない受講者用エンティティに追加します。 Entity Framework 入社日を使用し、Instructor エンティティと、 Student エンティティを区別する日付を登録します。
講師用および受講者用のエンティティをマップするには
マッピングの詳細] ウィンドウが表示することはできない場合、デザイン サーフェイスを右クリックし、 のマッピングの詳細をポイントします。
Instructor エンティティ タイプを選択し、 マッピングの詳細の ウィンドウで < 追加テーブルまたはビューを > 。
次の図は、マッピングの詳細 - 台目の講師用 ダイアログ ボックスです。
< 追加、テーブルまたはビュー > フィールドが選択したエンティティがマップ先テーブルのドロップダウン リストとして表示されます。
一覧からユーザー を選択します。
マッピングの詳細 ウィンドウには既定の列マッピングと条件を追加でくオプションを更新がします。
クリックして < 追加条件 >。
< 追加条件 > フィールドが条件を設定できる列のドロップダウン リストとして表示されます。
一覧から HireDate を選択します。
オペレーター 列マッピングの詳細 ウィンドウの ドロップ ボックスの一覧からです。
プロパティの値のの 列で、Not Null を選択します。
メモ |
|---|
エンティティのプロパティは、Is Null を または Is Not Null 比較でのみ使用できます。 これらは、等値比較では使用できません。 |
次に、完成したマッピングの詳細を示します。
Student エンティティの種類、に対して上記の手順を繰り返しますが EnrollmenDate プロパティを選択し、 の EnrollmentDate Is Not Null の条件を選択します。
階層ごとのテーブルの継承は実装されています。
ここでは、作成した Dynamic Data Web サイトをテストします。
継承された、テーブルをテストするには
ソリューション エクスプローラーで、Default.aspx ページを右クリックし、[ブラウザーで表示] をクリックします。
ページには、受講者と講師テーブル データ モデルに追加したを含むリストが表示されます。 一覧は、ユーザー テーブルが抽象マークいるので、担当者テーブルを表示されません。
受講者用または教官テーブルをクリックします。
受講者用または教官テーブルからデータを含むページが表示されます。 受講者用テーブルには"Hired"はありません。列各行に、登録の日付であり。 講師用テーブルには"Enrolled"はありません。列各行の採用を日付であり。
完了したら、ブラウザーを閉じます。
正常に EDM で TPH の継承を実装し、結果で、動的データ エンティティの Web サイトを表示しました。 継承が階層ごとのテーブル、EDM を定義する方法については、How to: Define a Model with Table-per-Hierarchy Inheritance を参照してください。 EDM の継承を実装する方法については、Inheritance (EDM) を参照してください。 継承 (EDM)。
その他の技術情報