モデルとコントローラーの追加
このセクションでは、データベース エンティティを定義するモデル クラスを追加します。 次に、これらのエンティティに対して CRUD 操作を実行する Web API コントローラーを追加します。
モデル クラスを追加する
このチュートリアルでは、Entity Framework (EF) に対する "Code First" アプローチを使用してデータベースを作成します。 Code First では、データベース テーブルに対応する C# クラスを記述すると、EF によってデータベースが作成されます。 (詳細については、「Entity Framework 開発アプローチ」を参照してください)。
まず、doメイン オブジェクトを POCO (単純な従来の CLR オブジェクト) として定義します。 次の POCO を作成します。
- 作成者
- 書籍
ソリューション エクスプローラーで、[モデル] フォルダーを右クリックします。 [追加] を選択し、[クラス] を選択します。 クラスに Author
という名前を付けます。
この Author.cs 内のすべての定型コードを次のコードと置き換えます。
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace BookService.Models
{
public class Author
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
}
次のコードで Book
という名前の別のクラスを追加します。
using System.ComponentModel.DataAnnotations;
namespace BookService.Models
{
public class Book
{
public int Id { get; set; }
[Required]
public string Title { get; set; }
public int Year { get; set; }
public decimal Price { get; set; }
public string Genre { get; set; }
// Foreign Key
public int AuthorId { get; set; }
// Navigation property
public Author Author { get; set; }
}
}
Entity Framework では、これらのモデルを使用してデータベース テーブルを作成します。 モデルごとに、Id
プロパティはデータベース テーブルの主キー列になります。
Book クラスでは、AuthorId
が Author
テーブルに外部キーを定義します。 (わかりやすくするために、各ブックの作成者が一人であると仮定しています)。book クラスには、関連する Author
へのナビゲーション プロパティも含まれています。 ナビゲーション プロパティを使用して、コード内の関連する Author
にアクセスできます。 ナビゲーション プロパティの詳細については、パート 4 の「エンティティ関係の処理」を参照してください。
Web API コントローラーを追加する
このセクションでは、CRUD 操作 (作成、読み取り、更新、削除) をサポートする Web API コントローラーを追加します。 コントローラーは Entity Framework を使用してデータベース レイヤーと通信します。
まず、Controllers/ValuesController.cs ファイルを削除できます。 このファイルには Web API コントローラーの例が含まれていますが、このチュートリアルでは必要ありません。
次に、プロジェクトをビルドします。 Web API スキャフォールディングではリフレクションを使用してモデル クラスを検索するため、コンパイル済みのアセンブリが必要です。
ソリューション エクスプローラーで、[コントローラー] フォルダーを右クリックします。 [追加] を選択し、[コントローラー] を選択します。
[スキャフォールディングの追加] ダイアログで、[Entity Framework を使用したアクションがある Web API 2 コントローラー] を選択します。 追加をクリックします。
[コントローラーの追加] ダイアログで、次の操作を行います。
- [モデル クラス] ドロップダウンで、
Author
クラスを選択します。 (ドロップダウンにそのクラスが表示されない場合は、プロジェクトをビルドしたことを確認してください)。 - [Use async controller actions] (非同期コントローラー アクションを使用する) をオンにします。
- コントローラー名は "AuthorsController" のままにします。
- [データ コンテキスト クラス] の横にあるプラス (+) ボタンをクリックします。
[新しいデータ コンテキスト] ダイアログで、既定の名前をそのままにして、[追加] をクリックします。
[追加] をクリックして、[コントローラーの追加] ダイアログを完了します。 このダイアログでは、次の 2 つのクラスがプロジェクトに追加されます。
AuthorsController
は Web API コントローラーを定義します。 コントローラーは、クライアントが作成者のリストに対して CRUD 操作を実行するために使用する REST API を実装します。BookServiceContext
によって、実行時にエンティティ オブジェクトが管理されます。これには、オブジェクトへのデータベースのデータの設定、変更の追跡、データベースへのデータの保持が含まれます。DbContext
から継承します。
この時点で、プロジェクトをもう一度ビルドします。 次に、同じ手順を実行して、Book
エンティティの API コントローラーを追加します。 今回は、モデル クラスの Book
を選択し、データ コンテキスト クラスの既存の BookServiceContext
クラスを選択します。 (新しいデータ コンテキストを作成しないでください)。[追加] をクリックしてコントローラーを追加します。