チュートリアル: MVC 5 を使用して EF Database First の使用を開始する

MVC、Entity Framework、ASP.NET スキャフォールディングを使用して、既存のデータベースへのインターフェイスを提供する Web アプリケーションを作成できます。 このチュートリアル シリーズでは、ユーザーがデータベース テーブルに存在するデータを表示、編集、作成、削除できるようにするコードを自動的に生成する方法について説明します。 生成されたコードは、データベース テーブル内の列に対応します。 シリーズの最後の部分では、データ モデルにデータ注釈を追加して、検証の要件を指定し、形式を表示する方法について説明します。 完了したら、.NET アプリと SQL データベースを Azure App Service に配置する方法を学習する Azure の記事に進むことができます。

このチュートリアルでは、既存のデータベースから開始し、ユーザーがデータを操作できる Web アプリケーションを短時間で作成する方法について説明します。 Entity Framework 6 と MVC 5 を使って Web アプリケーションを構築します。 ASP.NET のスキャフォールディング機能を使うと、データの表示、更新、作成、削除のためのコードを自動的に生成できます。 Visual Studio 内の発行ツールを使って、サイトとデータベースを Azure に簡単に配置できます。

シリーズのこの部分では、データベースの作成とデータの設定に焦点を当てます。

このシリーズは Tom Dykstra と Rick Anderson によって書かれました。 コメント セクションのユーザーからのフィードバックに基づいて改善されました。

このチュートリアルでは、次の作業を行いました。

  • データベースを設定する

前提条件

Visual Studio 2017

データベースを設定する

既存のデータベースを使用する環境を再現するため、最初に若干のデータがあらかじめ設定されたデータベースを作成してから、データベースに接続する Web アプリケーションを作成します。

このチュートリアルは、LocalDB と Visual Studio 2017 を使って開発されました。 LocalDB の代わりに既存のデータベース サーバーを使用できますが、お使いの Visual Studio のバージョンとデータベースの種類によっては、Visual Studio のすべてのデータ ツールがサポートされない場合があります。 データベースでツールを使用できない場合は、データベース固有の手順の一部をデータベースの管理スイート内で実行することが必要になる場合があります。

お使いの Visual Studio のバージョンでデータベース ツールに問題がある場合は、最新バージョンのデータベース ツールがインストールされていることを確認してください。 データベース ツールの更新またはインストールについては、Microsoft SQL Server Data Tools に関する記事をご覧ください。

Visual Studio を起動し、SQL Server データベース プロジェクトを作成します。 プロジェクトの名前は ContosoUniversityData にします。

create database project

空のデータベース プロジェクトが作成されました。 このデータベースを Azure に配置できるようにするには、プロジェクトのターゲット プラットフォームとして Azure SQL Database を設定します。 ターゲット プラットフォームを設定しても、データベースが実際に配置されることはありません。これは、データベースの設計がターゲット プラットフォームに対応していることをデータベース プロジェクトが確認することを意味するだけです。 ターゲット プラットフォームを設定するには、プロジェクトの [プロパティ] を開き、ターゲット プラットフォームとして [Microsoft Azure SQL Database] を選びます。

テーブルを定義する SQL スクリプトを追加して、このチュートリアルに必要なテーブルを作成できます。 プロジェクトを右クリックして、新しい項目を追加します。 [テーブルとビュー]>[テーブル] を選んで、Student という名前を付けます。

テーブル ファイルの T-SQL コマンドを、テーブルを作成する次のコードに置き換えます。

CREATE TABLE [dbo].[Student] (
    [StudentID]      INT           IDENTITY (1, 1) NOT NULL,
    [LastName]       NVARCHAR (50) NULL,
    [FirstName]      NVARCHAR (50) NULL,
    [EnrollmentDate] DATETIME      NULL,
    PRIMARY KEY CLUSTERED ([StudentID] ASC)
)

デザイン ウィンドウがコードと自動的に同期することに注意してください。 コードでもデザイナーでも作業できます。

show code and design

別のテーブルを追加します。 今度は Course という名前を付けて、次の T-SQL コマンドを使います。

CREATE TABLE [dbo].[Course] (
    [CourseID] INT           IDENTITY (1, 1) NOT NULL,
    [Title]    NVARCHAR (50) NULL,
    [Credits]  INT           NULL,
    PRIMARY KEY CLUSTERED ([CourseID] ASC)
)

さらに、もう 1 回繰り返して、Enrollment という名前のテーブルを作成します。

CREATE TABLE [dbo].[Enrollment] (
    [EnrollmentID] INT IDENTITY (1, 1) NOT NULL,
    [Grade]        DECIMAL(3, 2) NULL,
    [CourseID]     INT NOT NULL,
    [StudentID]    INT NOT NULL,
    PRIMARY KEY CLUSTERED ([EnrollmentID] ASC),
    CONSTRAINT [FK_dbo.Enrollment_dbo.Course_CourseID] FOREIGN KEY ([CourseID]) 
        REFERENCES [dbo].[Course] ([CourseID]) ON DELETE CASCADE,
    CONSTRAINT [FK_dbo.Enrollment_dbo.Student_StudentID] FOREIGN KEY ([StudentID]) 
        REFERENCES [dbo].[Student] ([StudentID]) ON DELETE CASCADE
)

データベースの配置後に実行されるスクリプトを使って、データベースにデータを設定できます。 配置後スクリプトをプロジェクトに追加します。 プロジェクトを右クリックして、新しい項目を追加します。 [ユーザー スクリプト]>[配置後スクリプト] を選びます。 既定の名前を使用できます。

配置後スクリプトに次の T-SQL コードを追加します。 このスクリプトは、一致するレコードが見つからない場合に、データベースにデータを追加するだけです。 データベースに入力されているデータが上書きまたは削除されることはありません。

MERGE INTO Course AS Target 
USING (VALUES 
        (1, 'Economics', 3), 
        (2, 'Literature', 3), 
        (3, 'Chemistry', 4)
) 
AS Source (CourseID, Title, Credits) 
ON Target.CourseID = Source.CourseID 
WHEN NOT MATCHED BY TARGET THEN 
INSERT (Title, Credits) 
VALUES (Title, Credits);

MERGE INTO Student AS Target
USING (VALUES 
        (1, 'Tibbetts', 'Donnie', '2013-09-01'), 
        (2, 'Guzman', 'Liza', '2012-01-13'), 
(3, 'Catlett', 'Phil', '2011-09-03')
)
AS Source (StudentID, LastName, FirstName, EnrollmentDate)
ON Target.StudentID = Source.StudentID
WHEN NOT MATCHED BY TARGET THEN
INSERT (LastName, FirstName, EnrollmentDate)
VALUES (LastName, FirstName, EnrollmentDate);

MERGE INTO Enrollment AS Target
USING (VALUES 
(1, 2.00, 1, 1),
(2, 3.50, 1, 2),
(3, 4.00, 2, 3),
(4, 1.80, 2, 1),
(5, 3.20, 3, 1),
(6, 4.00, 3, 2)
)
AS Source (EnrollmentID, Grade, CourseID, StudentID)
ON Target.EnrollmentID = Source.EnrollmentID
WHEN NOT MATCHED BY TARGET THEN
INSERT (Grade, CourseID, StudentID)
VALUES (Grade, CourseID, StudentID);

配置後スクリプトは、データベース プロジェクトを配置するたびに実行されることに注意してください。 そのため、このスクリプトを記述するときは、要件を慎重に検討する必要があります。 場合によっては、プロジェクトが配置されるたびに、既知のデータ セットからやり直したいことがあります。 そうではなく、既存のデータをどのような方法でも変更したくない場合もあります。 要件に基づいて、配置後スクリプトが必要か、スクリプトに含める必要があるかを決定できます。 配置後スクリプトを使ってデータベースを設定する方法について詳しくは、「SQL Server データベース プロジェクトにデータを含める」をご覧ください。

これで 4 つの SQL スクリプト ファイルが作成されましたが、実際のテーブルはありません。 データベース プロジェクトを localdb に配置する準備ができました。 Visual Studio で、[スタート] ボタンをクリックして (または F5 キーを押して)、データベース プロジェクトをビルドして配置します。 [出力] タブを調べて、ビルドと配置が成功したことを確認します。

新しいデータベースが作成されたことを確認するには、SQL Server オブジェクト エクスプローラーを開き、正しいローカル データベース サーバーでプロジェクトの名前を探します (この場合は (localdb)\ProjectsV13)。

テーブルにデータが設定されていることを確認するには、テーブルを右クリックして、[データの表示] を選びます。

show table data

テーブル データの編集可能なビューが表示されます。 たとえば、[テーブル]>dbo.course>[データの表示] を選ぶと、3 つの列 (CourseTitleCredits) と 4 つの行を含むテーブルが表示されます。

その他のリソース

Code First 開発の入門例については、「ASP.NET MVC 5 の概要」をご覧ください。 さらに高度な例については、ASP.NET MVC 4 アプリ用の Entity Framework データ モデルの作成に関する記事をご覧ください。

使用する Entity Framework の方法の選択に関するガイダンスについては、「Entity Framework 開発方法」をご覧ください。

次のステップ

このチュートリアルでは、次の作業を行いました。

  • データベースを設定する

次のチュートリアルに進み、Web アプリケーションとデータ モデルの作成方法を学習します。