SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント

3層データバインドを正しく活用しよう(前編)

実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント 第1回

エンティティの作成

 ソリューションの準備ができたら、いきなりUIから作成するのではなく、サンプルアプリケーションで使用する場所、会議室、予約情報の各エンティティクラスを作成していきましょう。これはUIに惑わされず、アプリケーションの機能に視点を当てて作業するためです。

クラスライブラリプロジェクトの作成

 ソリューションに「MRRS.Entity」という名前でクラスライブラリ プロジェクトを追加します。

場所のエンティティクラスを作成する

 MRRS.Entityプロジェクトに「Location.cs」という名前で新しいクラスを作成し、以下のように編集します。

[リスト4]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を使用する都合ですので、今は「おまじない」だと思っていて構いません。詳しく知りたい方は、各種リファレンスなどを参照ください。

 その他、プロパティ名の命名にはルールがあり、ルールに従うことで、自動的に主キーや外部キーが設定されます。そのルールを以下に簡単にまとめます。

Entity Frameworkの主なルール
ルール 挙動
int型の(自身のエンティティ名)Idプロパティ 自動連番の主キーとして設定
int型の(エンティティ名)Idプロパティ 指定したエンティティへの外部キーとして設定
エンティティ型の(エンティティ名)プロパティ 指定したエンティティへの1体1のナビゲーションプロパティ(対象エンティティのオブジェクトを設定)
ICollection<エンティティク型>型の(エンティティ名)sプロパティ 指定したエンティティへの1対Nのナビゲーションプロパティ(対象エンティティのオブジェクトをコレクションとして設定)

会議室、予約情報エンティティクラスを作成する

 場所のエンティティクラスと同様に、会議室用のMeetingRoom.cs、予約情報用のReservation.csを以下のように作成します。

[リスト5]MeetingRoom.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)
  }
}
  1. その会議室が所属する場所のIDを定義
  2. その会議室が所属する場所のナビゲーションプロパティを定義
  3. その会議室に関する予約情報のナビゲーションプロパティを定義
[リスト6]Reservation.cs
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)
  }
}
  1. 予約した会議室のIDを定義
  2. 予約した会議室のナビゲーションプロパティを定義

 以上でエンティティの作成は終了です。

まとめ

 次回は後編として、今回作成したエンティティを用いてEFコードファーストによるデータアクセス層の実装から始め、ビジネスロジック層、Webサイトの実装を行い、アプリケーションが実際に動作するまで解説していきます。お楽しみに。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
実例で学ぶASP.NET Webフォーム業務アプリケーション開発のポイント連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 高野 将(タカノ ショウ)

<個人紹介>新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C# 2017対応』(日経BP社、2017)など。< WINGSプロジェクト について>有限会社 WINGSプロジェクト が運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での 登録メンバ は約50名で、現在も執筆メンバを 募集中 。興味のある方は、どしどし応募頂きたい。 著書 記事 多数。 RSS X: @WingsPro_info (公式)、 @WingsPro_info/wings (メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6384 2012/02/16 14:00

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー