エンティティの作成
ソリューションの準備ができたら、いきなりUIから作成するのではなく、サンプルアプリケーションで使用する場所、会議室、予約情報の各エンティティクラスを作成していきましょう。これはUIに惑わされず、アプリケーションの機能に視点を当てて作業するためです。
クラスライブラリプロジェクトの作成
ソリューションに「MRRS.Entity」という名前でクラスライブラリ プロジェクトを追加します。
場所のエンティティクラスを作成する
MRRS.Entityプロジェクトに「Location.cs」という名前で新しいクラスを作成し、以下のように編集します。
using System;
using System.Collections.Generic;
namespace MRRS.Entity
{
public class Location
{
public int LocationId { get; set; }
public string LocationName { get; set; }
public virtual ICollection<MeetingRoom> MeetingRooms { get; set; } // (1)
}
}
エンティティクラスの名前や各プロパティの名前は、そのままEFコードファーストにより生成されるテーブルの名前や列名になります。
また、(1)のプロパティは「ナビゲーションプロパティ」と呼ばれるもので、リレーションを持ったテーブルとの関連を表します。今回の例では、その場所に所属する会議室を表すMeetingRoomクラスとの1:nの関係を表現します。virtualキーワードやICollection<T>ジェネリックコレクションインターフェースを用いるのはEFを使用する都合ですので、今は「おまじない」だと思っていて構いません。詳しく知りたい方は、各種リファレンスなどを参照ください。
その他、プロパティ名の命名にはルールがあり、ルールに従うことで、自動的に主キーや外部キーが設定されます。そのルールを以下に簡単にまとめます。
| ルール | 挙動 |
| int型の(自身のエンティティ名)Idプロパティ | 自動連番の主キーとして設定 |
| int型の(エンティティ名)Idプロパティ | 指定したエンティティへの外部キーとして設定 |
| エンティティ型の(エンティティ名)プロパティ | 指定したエンティティへの1体1のナビゲーションプロパティ(対象エンティティのオブジェクトを設定) |
| ICollection<エンティティク型>型の(エンティティ名)sプロパティ | 指定したエンティティへの1対Nのナビゲーションプロパティ(対象エンティティのオブジェクトをコレクションとして設定) |
会議室、予約情報エンティティクラスを作成する
場所のエンティティクラスと同様に、会議室用のMeetingRoom.cs、予約情報用のReservation.csを以下のように作成します。
using System;
using System.Collections.Generic;
namespace MRRS.Entity
{
public class MeetingRoom
{
public int MeetingRoomId { get; set; }
public string MeetingRoomName { get; set; }
public int LocationId { get; set; } // (1)
public virtual Location Location { get; set; } // (2)
public virtual ICollection<Reservation> Reservations { get; set; } // (3)
}
}
- その会議室が所属する場所のIDを定義
- その会議室が所属する場所のナビゲーションプロパティを定義
- その会議室に関する予約情報のナビゲーションプロパティを定義
using System;
namespace MRRS.Entity
{
public class Reservation
{
public int ReservationId { get; set; }
public int MeetingRoomId { get; set; } // (1)
public DateTime ReserveDataFrom { get; set; }
public DateTime ReserveDateTo { get; set; }
public string Purpose { get; set; }
public string Remarks { get; set; }
public virtual MeetingRoom MeetingRoom { get; set; } // (2)
}
}
- 予約した会議室のIDを定義
- 予約した会議室のナビゲーションプロパティを定義
以上でエンティティの作成は終了です。
まとめ
次回は後編として、今回作成したエンティティを用いてEFコードファーストによるデータアクセス層の実装から始め、ビジネスロジック層、Webサイトの実装を行い、アプリケーションが実際に動作するまで解説していきます。お楽しみに。
