次の方法で共有


Entity Framework 4.0 Database First と ASP.NET 4 Web Formsを使用したはじめに

作成者: Tom Dykstra

Contoso University サンプル Web アプリケーションは、Entity Framework 4.0 と Visual Studio 2010 を使用して ASP.NET Web Forms アプリケーションを作成する方法を示しています。 サンプル アプリケーションは、架空の Contoso 大学の Web サイトです。 学生の受け付け、講座の作成、講師の割り当てなどの機能が含まれています。

このチュートリアルでは、C# の例を示します。 ダウンロード可能なサンプルには、C# と Visual Basic の両方のコードが含まれています。

Database First

Entity Framework でデータを操作するには、 Database FirstModel FirstCode First の 3 つの方法があります。 このチュートリアルは Database First 用です。 これらのワークフローの違いと、シナリオに最適なものを選択する方法に関するガイダンスについては、「 Entity Framework 開発ワークフロー」を参照してください。

Web フォーム

このチュートリアル シリーズでは、ASP.NET Web Forms モデルを使用し、Visual Studio で ASP.NET Web Formsを操作する方法を理解していることを前提としています。 そうでない場合は、「ASP.NET 4.5 Web Formsを使用したはじめに」を参照してください。 ASP.NET MVC フレームワークを操作する場合は、「ASP.NET MVC を使用した Entity Framework のはじめに」を参照してください。

ソフトウェア バージョン

チュートリアルに示されている また、 で動作します
Windows 7 Windows 8
Visual Studio 2010 Visual Studio 2010 Express for Web。 このチュートリアルは、新しいバージョンの Visual Studio ではテストされていません。 メニューの選択、ダイアログ ボックス、テンプレートには多くの違いがあります。
.NET 4 .NET 4.5 は .NET 4 と下位互換性がありますが、チュートリアルは .NET 4.5 でテストされていません。
Entity Framework 4 このチュートリアルは、新しいバージョンの Entity Framework ではテストされていません。 Entity Framework 5 以降では、EF 4.1 で導入された が DbContext API 既定で使用されます。 EntityDataSource コントロールは、API を使用 ObjectContext するように設計されています。 API で EntityDataSource コントロールを使用する方法については、こちらのブログ投稿DbContext参照してください。

質問

チュートリアルに直接関連しない質問がある場合は、ASP.NET Entity Framework フォーラムEntity Framework および LINQ to Entities フォーラム、または StackOverflow.com に投稿できます。

概要

これらのチュートリアルで構築するアプリケーションは、簡単な大学の Web サイトです。

Contoso University のホーム ページのスクリーンショット。[ホーム]、[バージョン情報]、[学生]、[コース]、[講師]、[部署] ページへのリンクが表示されています。

ユーザーは学生、講座、講師の情報を見たり、更新したりできます。 作成する画面をいくつか次に示します。

Image30

Image37

Image31

Image32

Web アプリケーションの作成

チュートリアルを開始するには、Visual Studio を開き、ASP.NET Web アプリケーション テンプレートを使用して新しい ASP.NET Web アプリケーション プロジェクトを 作成します。

Image01

このテンプレートは、スタイル シートとマスター ページが既に含まれている Web アプリケーション プロジェクトを作成します。

Image02

Site.Master ファイルを開き、"マイ ASP.NET アプリケーション" を "Contoso University" に変更します。

<h1>
    Contoso University
</h1>

という名前NavigationMenuMenu コントロールを見つけて、次のマークアップに置き換えます。これにより、作成するページのメニュー項目が追加されます。

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
                    IncludeStyleBlock="false" Orientation="Horizontal">
                    <Items>
                        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
                        <asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />
                        <asp:MenuItem NavigateUrl="~/Students.aspx" Text="Students">
                            <asp:MenuItem NavigateUrl="~/StudentsAdd.aspx" Text="Add Students" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Courses.aspx" Text="Courses">
                            <asp:MenuItem NavigateUrl="~/CoursesAdd.aspx" Text="Add Courses" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Instructors.aspx" Text="Instructors">
                            <asp:MenuItem NavigateUrl="~/InstructorsCourses.aspx" Text="Course Assignments" />
                            <asp:MenuItem NavigateUrl="~/OfficeAssignments.aspx" Text="Office Assignments" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Departments.aspx" Text="Departments">
                            <asp:MenuItem NavigateUrl="~/DepartmentsAdd.aspx" Text="Add Departments" />
                        </asp:MenuItem>
                    </Items>
                </asp:Menu>

Default.aspx ページを開き、 という名前BodyContentのコントロールをContent次のように変更します。

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to Contoso University!
   </h2>
</asp:Content>

これで、作成するさまざまなページへのリンクを含む単純なホーム ページが作成されました。

Contoso University のホーム ページのスクリーンショット。[ホーム]、[バージョン情報]、[学生]、[コース]、[講師]、[部署] ページへのリンクが表示されています。

データベースの作成

これらのチュートリアルでは、Entity Framework データ モデル デザイナーを使用して、既存のデータベースに基づいてデータ モデルを自動的に作成します (多くの場合、 データベース優先 アプローチと呼ばれます)。 このチュートリアル シリーズでは説明されていない別の方法として、データ モデルを手動で作成してから、データベースを作成するスクリプト ( モデル優先 アプローチ) をデザイナーに生成してもらう方法があります。

このチュートリアルで使用するデータベース優先のメソッドの場合、次の手順では、サイトにデータベースを追加します。 最も簡単な方法は、最初にこのチュートリアルに付属するプロジェクトをダウンロードすることです。 次に 、App_Data フォルダーを右クリックし、[ 既存の項目の追加] を選択し、ダウンロードしたプロジェクトから School.mdf データベース ファイルを選択します。

別の方法として、「 学校サンプル データベースの作成」の手順に従います。 データベースをダウンロードするか作成するかに関係なく、次のフォルダーからアプリケーションの App_Data フォルダーに School.mdf ファイルをコピーします。

%PROGRAMFILES%\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

(.mdf ファイルのこの場所では、SQL Server 2008 Express を使用していることを前提としています。

スクリプトからデータベースを作成する場合は、次の手順に従ってデータベース ダイアグラムを作成します。

  1. [サーバー エクスプローラー] で、[データ接続] を展開し、[School.mdf] を展開し、[データベース ダイアグラム] を右クリックして、[新しいダイアグラムの追加] を選択します。

    Image35

  2. すべてのテーブルを選択し、[ 追加] をクリックします。

    Image36

    SQL Serverは、テーブル、テーブル内の列、およびテーブル間のリレーションシップを示すデータベース ダイアグラムを作成します。 テーブルを移動して、好きなように整理できます。

  3. ダイアグラムを "SchoolDiagram" として保存し、閉じます。

このチュートリアルに付属する School.mdf ファイルをダウンロードする場合は、[Server エクスプローラー のデータベース ダイアグラム] の [SchoolDiagram] をダブルクリックしてデータベース ダイアグラムを表示できます。

Image38

図は次のようになります (テーブルは、ここに示されているものとは異なる場所にある可能性があります)。

Image04

Entity Framework データ モデルの作成

これで、このデータベースから Entity Framework データ モデルを作成できます。 データ モデルはアプリケーションのルート フォルダーに作成できますが、このチュートリアルでは DAL (データ アクセス層の場合) という名前のフォルダーに配置します。

ソリューション エクスプローラーで、DAL という名前のプロジェクト フォルダーを追加します (ソリューションの下ではなく、プロジェクトの下にあることを確認してください)。

DAL フォルダーを右クリックし、[追加] と [新しい項目] を選択します。 [ インストールされているテンプレート] で[ データ] を選択 し、ADO.NET エンティティ データ モデル テンプレートを選択し、 SchoolModel.edmx という名前を付けて、[ 追加] をクリックします。

Image05

これにより、エンティティ データ モデル ウィザードが開始されます。 ウィザードの最初の手順では、既定で [ データベースから生成 ] オプションが選択されています。 [次へ] をクリックします。

Image06

[ データ接続の選択] ステップで 、既定値をそのままにして、[ 次へ] をクリックします。 既定では School データベースが選択されており、接続設定は SchoolEntities としてWeb.config ファイルに保存されます。

Image07

[ データベース オブジェクトの選択 ] ウィザードの手順で、(前に生成したダイアグラム用に作成した) を除く sysdiagrams すべてのテーブルを選択し、[完了] をクリック します

Image08

モデルの作成が完了すると、Visual Studio には、データベース テーブルに対応する Entity Framework オブジェクト (エンティティ) のグラフィカルな表現が表示されます。 (データベース 図と同様に、個々の要素の場所は、この図に示されているものとは異なる場合があります。必要に応じて、要素をドラッグして図と一致させることができます)。

Image09

Entity Framework データ モデルの探索

エンティティダイアグラムはデータベースダイアグラムとよく似ていますが、いくつかの違いがあります。 1 つの違いは、関連付けの種類を示す各関連付けの最後にシンボルを追加することです (テーブルリレーションシップは、データ モデルのエンティティ関連付けと呼ばれます)。

  • 1 対 0 または 1 の関連付けは、"1" と "0..1" で表されます。

    Image39

    この場合、エンティティはエンティティに Person 関連付 OfficeAssignment けられている場合と関連付けられていない場合があります。 エンティティは OfficeAssignment エンティティに関連付 Person けられている必要があります。 言い換えると、インストラクターはオフィスに割り当てられる場合と割り当てられない場合があり、どのオフィスも 1 人のインストラクターにのみ割り当てることができます。

  • 一対多の関連付けは、"1" と "*" で表されます。

    Image40

    この場合、エンティティに Person 関連付けられている StudentGrade エンティティがある場合と関連付けられていない場合があります。 エンティティは StudentGrade 、1 つの Person エンティティに関連付ける必要があります。 StudentGrade エンティティは、実際にはこのデータベースに登録されているコースを表します。学生がコースに登録されていて、まだ成績がない場合、 Grade プロパティは null です。 つまり、学生がまだコースに登録されていないか、1 つのコースに登録されているか、複数のコースに登録されている可能性があります。 登録されたコースの各成績は、1 人の学生にのみ適用されます。

  • 多対多の関連付けは、"*" と "*" で表されます。

    Image41

    この場合、エンティティは Person 関連付けられた Course エンティティを持つ場合と存在しない場合があり、逆も当てはまります。 Course エンティティは、関連付けられた Person エンティティを持っている場合と存在しない場合もあります。 言い換えると、インストラクターは複数のコースを教え、1つのコースは複数のインストラクターによって教えられるかもしれません。 (このデータベースでは、このリレーションシップは講師にのみ適用され、学生はコースにリンクされません。学生は StudentGrades テーブルによってコースにリンクされます)。

データベース ダイアグラムとデータ モデルのもう 1 つの違いは、各エンティティの追加の ナビゲーション プロパティ セクションです。 エンティティのナビゲーション プロパティは、関連するエンティティを参照します。 たとえば、エンティティの CoursesPerson プロパティには、そのエンティティに Course 関連するすべてのエンティティのコレクションが Person 含まれています。

Image12

さらに、データベースとデータ モデルのもう 1 つの違いは、多対多リレーションシップの テーブルと Course テーブルをリンクPersonするためにデータベースで使用される関連付けテーブルがないことですCourseInstructor。 ナビゲーション プロパティを使用すると、エンティティから関連 Course エンティティを取得し、エンティティから Person 関連 Person エンティティを Course 取得できるため、データ モデルで関連付けテーブルを表す必要はありません。

Image11

このチュートリアルでは、 FirstName テーブルの列に実際に人物の Person 名とミドル ネームの両方が含まれているとします。 フィールドの名前を変更してこれを反映したいが、データベース管理者 (DBA) がデータベースを変更したくない場合がある。 データ モデル内の プロパティの名前は FirstName 変更できますが、データベースと同等の名前は変更しません。

デザイナーで、エンティティの FirstName を右クリックし、[名前の Person 変更] を選択 します

Image13

新しい名前 "FirstMidName" を入力します。 これにより、データベースを変更せずにコード内の列を参照する方法が変更されます。

Image29

モデル ブラウザーは、データベース構造、データ モデル構造、およびそれらの間のマッピングを表示する別の方法を提供します。 表示するには、エンティティ デザイナーで空白の領域を右クリックし、[ モデル ブラウザー] をクリックします。

Image18

[モデル ブラウザー] ウィンドウにツリー ビューが表示されます。 ([モデル ブラウザー] ペインが [ソリューション エクスプローラー] ペインにドッキングされている場合があります)。SchoolModel ノードはデータ モデル構造を表し、SchoolModel.Store ノードはデータベース構造を表します。

Image26

SchoolModel.Store 展開してテーブルを表示し、[テーブル/ ビュー] を展開してテーブルを表示し、[コース] を展開してテーブル内の列を表示します。

Image19

SchoolModel を展開し、[エンティティの種類] を展開し、[コース] ノードを展開してエンティティ内のエンティティとプロパティを表示します。

Image20

デザイナーまたは [モデル ブラウザー ] ペインで、Entity Framework が 2 つのモデルのオブジェクトをどのように関連付けするかを確認できます。 エンティティを Person 右クリックし、[ テーブル マッピング] を選択します。

Image21

[マッピングの 詳細 ] ウィンドウが開きます。 このウィンドウでは、データベース列 FirstName が に FirstMidNameマップされていることを確認できます。これは、データ モデルで名前を に変更した値です。

Image22

Entity Framework は XML を使用して、データベース、データ モデル、およびそれらの間のマッピングに関する情報を格納します。 SchoolModel.edmx ファイルは、実際にはこの情報を含む XML ファイルです。 デザイナーは情報をグラフィカル形式でレンダリングしますが、ソリューション エクスプローラーで .edmx ファイルを右クリックし、[ファイルを開く] をクリックし、[XML (テキスト) エディター] を選択して、ファイルを XML として表示することもできます。 (データ モデル デザイナーと XML エディターは、同じファイルを開いたり操作したりする 2 つの異なる方法に過ぎません。そのため、デザイナーで XML エディターでファイルを同時に開いたり開いたりすることはできません)。

これで、Web サイト、データベース、データ モデルが作成されました。 次のチュートリアルでは、データ モデルと ASP.NET EntityDataSource コントロールを使用してデータの操作を開始します。