Entity Framework 4.0 Database First と ASP.NET 4 Web Formsを使用したはじめに
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 First、 Model First、 Code 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 サイトです。
ユーザーは学生、講座、講師の情報を見たり、更新したりできます。 作成する画面をいくつか次に示します。
Web アプリケーションの作成
チュートリアルを開始するには、Visual Studio を開き、ASP.NET Web アプリケーション テンプレートを使用して新しい ASP.NET Web アプリケーション プロジェクトを 作成します。
このテンプレートは、スタイル シートとマスター ページが既に含まれている Web アプリケーション プロジェクトを作成します。
Site.Master ファイルを開き、"マイ ASP.NET アプリケーション" を "Contoso University" に変更します。
<h1>
Contoso University
</h1>
という名前NavigationMenu
の Menu コントロールを見つけて、次のマークアップに置き換えます。これにより、作成するページのメニュー項目が追加されます。
<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>
これで、作成するさまざまなページへのリンクを含む単純なホーム ページが作成されました。
データベースの作成
これらのチュートリアルでは、Entity Framework データ モデル デザイナーを使用して、既存のデータベースに基づいてデータ モデルを自動的に作成します (多くの場合、 データベース優先 アプローチと呼ばれます)。 このチュートリアル シリーズでは説明されていない別の方法として、データ モデルを手動で作成してから、データベースを作成するスクリプト ( モデル優先 アプローチ) をデザイナーに生成してもらう方法があります。
このチュートリアルで使用するデータベース優先のメソッドの場合、次の手順では、サイトにデータベースを追加します。 最も簡単な方法は、最初にこのチュートリアルに付属するプロジェクトをダウンロードすることです。 次に 、App_Data フォルダーを右クリックし、[ 既存の項目の追加] を選択し、ダウンロードしたプロジェクトから School.mdf データベース ファイルを選択します。
別の方法として、「 学校サンプル データベースの作成」の手順に従います。 データベースをダウンロードするか作成するかに関係なく、次のフォルダーからアプリケーションの App_Data フォルダーに School.mdf ファイルをコピーします。
%PROGRAMFILES%\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA
(.mdf ファイルのこの場所では、SQL Server 2008 Express を使用していることを前提としています。
スクリプトからデータベースを作成する場合は、次の手順に従ってデータベース ダイアグラムを作成します。
[サーバー エクスプローラー] で、[データ接続] を展開し、[School.mdf] を展開し、[データベース ダイアグラム] を右クリックして、[新しいダイアグラムの追加] を選択します。
すべてのテーブルを選択し、[ 追加] をクリックします。
SQL Serverは、テーブル、テーブル内の列、およびテーブル間のリレーションシップを示すデータベース ダイアグラムを作成します。 テーブルを移動して、好きなように整理できます。
ダイアグラムを "SchoolDiagram" として保存し、閉じます。
このチュートリアルに付属する School.mdf ファイルをダウンロードする場合は、[Server エクスプローラー のデータベース ダイアグラム] の [SchoolDiagram] をダブルクリックしてデータベース ダイアグラムを表示できます。
図は次のようになります (テーブルは、ここに示されているものとは異なる場所にある可能性があります)。
Entity Framework データ モデルの作成
これで、このデータベースから Entity Framework データ モデルを作成できます。 データ モデルはアプリケーションのルート フォルダーに作成できますが、このチュートリアルでは DAL (データ アクセス層の場合) という名前のフォルダーに配置します。
ソリューション エクスプローラーで、DAL という名前のプロジェクト フォルダーを追加します (ソリューションの下ではなく、プロジェクトの下にあることを確認してください)。
DAL フォルダーを右クリックし、[追加] と [新しい項目] を選択します。 [ インストールされているテンプレート] で[ データ] を選択 し、ADO.NET エンティティ データ モデル テンプレートを選択し、 SchoolModel.edmx という名前を付けて、[ 追加] をクリックします。
これにより、エンティティ データ モデル ウィザードが開始されます。 ウィザードの最初の手順では、既定で [ データベースから生成 ] オプションが選択されています。 [次へ] をクリックします。
[ データ接続の選択] ステップで 、既定値をそのままにして、[ 次へ] をクリックします。 既定では School データベースが選択されており、接続設定は SchoolEntities としてWeb.config ファイルに保存されます。
[ データベース オブジェクトの選択 ] ウィザードの手順で、(前に生成したダイアグラム用に作成した) を除く sysdiagrams
すべてのテーブルを選択し、[完了] をクリック します。
モデルの作成が完了すると、Visual Studio には、データベース テーブルに対応する Entity Framework オブジェクト (エンティティ) のグラフィカルな表現が表示されます。 (データベース 図と同様に、個々の要素の場所は、この図に示されているものとは異なる場合があります。必要に応じて、要素をドラッグして図と一致させることができます)。
Entity Framework データ モデルの探索
エンティティダイアグラムはデータベースダイアグラムとよく似ていますが、いくつかの違いがあります。 1 つの違いは、関連付けの種類を示す各関連付けの最後にシンボルを追加することです (テーブルリレーションシップは、データ モデルのエンティティ関連付けと呼ばれます)。
1 対 0 または 1 の関連付けは、"1" と "0..1" で表されます。
この場合、エンティティはエンティティに
Person
関連付OfficeAssignment
けられている場合と関連付けられていない場合があります。 エンティティはOfficeAssignment
エンティティに関連付Person
けられている必要があります。 言い換えると、インストラクターはオフィスに割り当てられる場合と割り当てられない場合があり、どのオフィスも 1 人のインストラクターにのみ割り当てることができます。一対多の関連付けは、"1" と "*" で表されます。
この場合、エンティティに
Person
関連付けられているStudentGrade
エンティティがある場合と関連付けられていない場合があります。 エンティティはStudentGrade
、1 つのPerson
エンティティに関連付ける必要があります。StudentGrade
エンティティは、実際にはこのデータベースに登録されているコースを表します。学生がコースに登録されていて、まだ成績がない場合、Grade
プロパティは null です。 つまり、学生がまだコースに登録されていないか、1 つのコースに登録されているか、複数のコースに登録されている可能性があります。 登録されたコースの各成績は、1 人の学生にのみ適用されます。多対多の関連付けは、"*" と "*" で表されます。
この場合、エンティティは
Person
関連付けられたCourse
エンティティを持つ場合と存在しない場合があり、逆も当てはまります。Course
エンティティは、関連付けられたPerson
エンティティを持っている場合と存在しない場合もあります。 言い換えると、インストラクターは複数のコースを教え、1つのコースは複数のインストラクターによって教えられるかもしれません。 (このデータベースでは、このリレーションシップは講師にのみ適用され、学生はコースにリンクされません。学生は StudentGrades テーブルによってコースにリンクされます)。
データベース ダイアグラムとデータ モデルのもう 1 つの違いは、各エンティティの追加の ナビゲーション プロパティ セクションです。 エンティティのナビゲーション プロパティは、関連するエンティティを参照します。 たとえば、エンティティの Courses
Person
プロパティには、そのエンティティに Course
関連するすべてのエンティティのコレクションが Person
含まれています。
さらに、データベースとデータ モデルのもう 1 つの違いは、多対多リレーションシップの テーブルと Course
テーブルをリンクPerson
するためにデータベースで使用される関連付けテーブルがないことですCourseInstructor
。 ナビゲーション プロパティを使用すると、エンティティから関連 Course
エンティティを取得し、エンティティから Person
関連 Person
エンティティを Course
取得できるため、データ モデルで関連付けテーブルを表す必要はありません。
このチュートリアルでは、 FirstName
テーブルの列に実際に人物の Person
名とミドル ネームの両方が含まれているとします。 フィールドの名前を変更してこれを反映したいが、データベース管理者 (DBA) がデータベースを変更したくない場合がある。 データ モデル内の プロパティの名前は FirstName
変更できますが、データベースと同等の名前は変更しません。
デザイナーで、エンティティの FirstName を右クリックし、[名前の Person
変更] を選択 します。
新しい名前 "FirstMidName" を入力します。 これにより、データベースを変更せずにコード内の列を参照する方法が変更されます。
モデル ブラウザーは、データベース構造、データ モデル構造、およびそれらの間のマッピングを表示する別の方法を提供します。 表示するには、エンティティ デザイナーで空白の領域を右クリックし、[ モデル ブラウザー] をクリックします。
[モデル ブラウザー] ウィンドウにツリー ビューが表示されます。 ([モデル ブラウザー] ペインが [ソリューション エクスプローラー] ペインにドッキングされている場合があります)。SchoolModel ノードはデータ モデル構造を表し、SchoolModel.Store ノードはデータベース構造を表します。
SchoolModel.Store 展開してテーブルを表示し、[テーブル/ ビュー] を展開してテーブルを表示し、[コース] を展開してテーブル内の列を表示します。
SchoolModel を展開し、[エンティティの種類] を展開し、[コース] ノードを展開してエンティティ内のエンティティとプロパティを表示します。
デザイナーまたは [モデル ブラウザー ] ペインで、Entity Framework が 2 つのモデルのオブジェクトをどのように関連付けするかを確認できます。 エンティティを Person
右クリックし、[ テーブル マッピング] を選択します。
[マッピングの 詳細 ] ウィンドウが開きます。 このウィンドウでは、データベース列 FirstName
が に FirstMidName
マップされていることを確認できます。これは、データ モデルで名前を に変更した値です。
Entity Framework は XML を使用して、データベース、データ モデル、およびそれらの間のマッピングに関する情報を格納します。 SchoolModel.edmx ファイルは、実際にはこの情報を含む XML ファイルです。 デザイナーは情報をグラフィカル形式でレンダリングしますが、ソリューション エクスプローラーで .edmx ファイルを右クリックし、[ファイルを開く] をクリックし、[XML (テキスト) エディター] を選択して、ファイルを XML として表示することもできます。 (データ モデル デザイナーと XML エディターは、同じファイルを開いたり操作したりする 2 つの異なる方法に過ぎません。そのため、デザイナーで XML エディターでファイルを同時に開いたり開いたりすることはできません)。
これで、Web サイト、データベース、データ モデルが作成されました。 次のチュートリアルでは、データ モデルと ASP.NET EntityDataSource
コントロールを使用してデータの操作を開始します。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示