CodeZine(コードジン)

特集ページ一覧

ASP.NET 4.5の「Scaffolding(スキャフォールディング)」機能を試す(前編)

実例で学ぶASP.NET 4.5 Webフォーム 新機能活用法 第6回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/11/26 14:00
目次

生成元コード作成

 最初に、コードを生成する元となるデータモデルクラスとDbContext派生クラスを作成します。

データモデルの作成

 コード生成の元となるデータモデルのクラスです。Modelsというフォルダーをプロジェクトに作成し、そこにLocationという名前のクラスを新たに作成してください(リスト1)。

リスト1 場所のデータモデル(Models\Location.cs)
using System;
using System.ComponentModel.DataAnnotations;

namespace MRRS_Scaffolding.Models
{
  public class Location  //(1)
  {
    [ScaffoldColumn(false)]
    public int Id { get; set; }  //(2)

    [Display(Name="場所名")]  //(3)
    [Required(ErrorMessage="場所名を入力してください。")]  //(4)
    public string Name { get; set; }
  }
}

 データモデルとなるクラスを作成する際のポイントは、以下の4点です。

(1)クラス名がテーブル名となる

 データモデルクラス名を複数形にしたものが、生成されるテーブルの名前になります。今回の例では、Locationがデータモデル名、Locationsがテーブル名になります。

(2)プライマリキーとなるフィールドをIdという名前で作成する

 「Id」という名前のフィールドがあると、データベースのテーブルを生成した際、そのフィールドを自動的にプライマリキーにして生成します。なお、Id項目は通常画面に出しませんので、System.ComponentModel.DataAnnotations名前空間のScaffoldColumn属性の引数にfalseを渡すことで、自動生成される画面には出力されないようにします。

 なお、Entity FrameworkのCodeFirstのルールでは、「Id」以外の名前の項目をプライマリキーにしたい場合、System.ComponentModel.DataAnnotations名前空間のKey属性を付ければ良いことになっています。しかし、プレリリース版のScaffoldingでは自動的にKey属性のついた項目を画面側でプライマリキーとして扱ってはくれず、無条件に「Id」という名前を使ってコードを生成してしまいますので、注意が必要です。どうしても「Id」以外の名前を使いたい場合は、生成後のコードの「Id」を使っている箇所を、すべて手で修正する必要があります。

 この制限は「設定より規約(Convention over Configuration)」という考えに沿ったものであると考えます。この考えは昨今の風潮であり、ASP.NET MVCでも取り入れられています。今後の正式リリースでは、Key属性を解釈してくれるようになるかもしれませんが、素直に「Id」列をプライマリキーとしたほうが面倒がないでしょう。

(3)画面への表示名をDisplay属性で指定する

 自動生成する項目の画面での表示名を、System.ComponentModel.DataAnnotations名前空間のDisplay属性を使って指定します。

(4)必須入力項目であることを、Required属性で指定する

 必須入力としたい項目については、System.ComponentModel.DataAnnotations名前空間のRequired属性を指定します。すると、画面でも必須入力項目として扱われるようになります。なお、ErrorMessageプロパティには必須入力エラーの際に表示したいメッセージを指定します。

 なお、他にも第4回で紹介したモデル検証で使える検証属性が指定可能です。表1に再掲します。

表1:モデル検証で使用できる主な検証属性
属性名 説明 主なプロパティ
Compare 他のプロパティと等しいかどうか検証する OtherProperty:
比較対象のプロパティ名
Range 数値が範囲内であるかどうか検証する Maximum:最大値、
Minimum:最小値、
OperandType:検証対象の値の型
StringLength 文字列長が班内であるかどうか検証する MaximumLength:最大文字列長、
MinimumLenght:最少文字列長
EmailAddress 文字列がEメールアドレスとして妥当かどうか検証する  
FileExtensions ファイル名の拡張子が妥当であるか検証する Extensions:拡張子
Phone 文字列が電話番号として妥当かどうか検証する  
Url 文字列がURLとして妥当かどうか検証する  

DbContext派生クラスの作成

 現時点のScaffoldingで生成されるコードでは、データアクセスにEntity Frameworkを用います。そのため、System.Data.Entity名前空間のDbContextクラスを継承した、中身が空のクラスを作成しておく必要があります。今回はデータモデルと同じModelsフォルダーに、MRRSContextクラスとして作成しておきます(リスト2)。

リスト2 DbContext派生クラス(Models\MRRSContext.cs)
using System;
using System.Data.Entity;

namespace MRRS_Scaffolding.Models
{
  public class MRRSContext : DbContext
  {
  }
}
DbContextクラス

 DbContextクラスとは、Entity Frameworkを用いたデータアクセスの基本となるクラスです。複数のテーブルをまたがった追加、変更、削除といった「トランザクション」を管理するためのクラスで、いわゆる「ユニット・オブ・ワーク(Unit of work)」パターンの実装です。

 

 DbContextクラスの派生クラスに、操作対象のテーブルに対応したDbSet<T>型のプロパティを配置し、そのDbSet<T>型プロパティに対して追加、変更、削除などを行った後、DbContextクラスに用意されたSaveChagesメソッドを呼び出すことで、トランザクションを確定させます。詳しくは以下の記事などを参照ください。

 


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:実例で学ぶASP.NET 4.5 Webフォーム 新機能活用法

著者プロフィール

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

    <個人紹介> 新潟県長岡市在住の在宅リモートワークプログラマー。家事や育児、仕事の合間に長岡IT開発者勉強会(NDS)、Niigata.NET、TDDBCなどのコミュニティに関わったり、Web記事や書籍などの執筆を行ったりしている。著書に『アプリを作ろう! Visual C#入門 Visual C...

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5