SHOEISHA iD

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

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

.NET最新版でASP.NET Core

.NET 6でASP.NET CoreのRazor Pagesアプリケーションにデータ処理を絡めた機能拡張を施す

.NET最新版でASP.NET Core 第3回


  • X ポスト
  • このエントリーをはてなブックマークに追加

データを取り扱うためのモデルクラスを追加する

 続けて、足あとデータのためのモデルクラスを追加します。モデルクラスとは、その名の通りデータを取り扱うためのクラスです。モデルクラスは、Scaffoldingに先立ち手作業で追加します。

 まず、プロジェクトのルート直下に、「Models」という名前のフォルダを追加します。Modelsフォルダはプロジェクト作成直後は存在しませんが、モデルクラスのファイルを格納するフォルダです。そのModelsフォルダに、「Footmark」という名前のモデルクラスをFootmark.csファイルとして追加します。

リスト1:Models/Footmark.cs
namespace RazorPagesSample.Models
{
    public class Footmark
    {
        public int ID { get; set; }
        public string YourName { get; set; }
        public string Message { get; set; }
        public DateTime VisitTime { get; set; }
    }
}

 Footmarkクラスには、表1の4つのプロパティがあります。

表1:Footmarkクラスのプロパティ
プロパティ データ型 概要
ID int 主キー
YourName string 訪問者の名前
Message string 訪問メッセージ
VisitTime DateTime 訪問日時

 このようなモデルクラスは、特に何かを継承するということもなく、データベースに格納されるデータのプロパティのみを定義しているただのクラスファイルです。POCO(Plain Old CLR Objects)クラスとも呼ばれます。

 POCOクラスは単にデータの入れ物に過ぎません。何らかの形でデータベースとやり取りする仕組みが必要です。これがデータベースコンテキストで、Scaffolding時に自動的に準備されます。冒頭の図2のように、各ページモデルはモデルごとに用意されたデータベースコンテキストを通じて、データベースとやり取りします。

FootmarkモデルをScaffoldingして、CRUDページを作成する

 モデルクラスFootmarkを作成したので、Scaffoldingによりこのモデルに対してCRUDページ(作成、参照、更新、削除)を追加します。引き続き、プロジェクトのルートフォルダで、以下のコマンドを実行してください。

% dotnet-aspnet-codegenerator razorpage -m Footmark -dc RazorPagesFootmarkContext -udl -outDir Pages/Footmarks --referenceScriptLibraries -sqlite
…略…
Minimal hosting scenario!
Generating a new DbContext class 'RazorPagesFootmarkContext'	(1)
Attempting to compile the application in memory with the added DbContext.
Attempting to figure out the EntityFramework metadata for the model and DbContext: 'Footmark'
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
      Entity Framework Core 6.0.3 initialized 'RazorPagesFootmarkContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite:6.0.3' with options: None
Added DbContext : '/Data/RazorPagesFootmarkContext.cs'	(2)
Added Razor Page : /Pages/Footmarks/Create.cshtml
Added PageModel : /Pages/Footmarks/Create.cshtml.cs
…略…

 コマンドの最初の引数razorpageは、RazorPagesに基づくScaffoldingを行うことの指示です。これはジェネレータと呼ばれ、他にビュー単独のview、コントローラ単独のcontroller、認証用のidentityなどがあります。

 ここには、生成したものや改変したものが順番に表示されています。たとえば(1)には、データベースコンテキスト(DbContext)としてRazorPagesFootmarkContextクラスを生成したとあります。このように、Scaffoldingによってモデルクラスからデータベースコンテキストクラスが自動的に生成されます。(2)以降は、実際に追加されたファイルが表示されます。

 dotnet-aspnet-codegeneratorコマンドには多数のオプションが指定されましたが、主なものを表2に示します。

表2:dotnet-aspnet-codegeneratorコマンドの主なオプション
オプション 説明
-m モデルクラスの名前
-dc 使用するDbContextクラスの名前(これでクラスファイルが作成される)
-udl 既定のレイアウトを使用する指示
-outDir ビューを作成するフォルダ(プロジェクトルートの相対パス)
--referenceScriptLibraries 作成・編集ページに_ValidationScriptsPartialを追加
--sqlite データベースプロバイダにSQLiteを使用

[NOTE]--referenceScriptLibrariesオプション

 --referenceScriptLibrariesは、Pages/Shared/_ValidationScriptsPartial.cshtmlファイルのレンダリングコードを作成・編集ページに追加するかというオプションです。このファイルには、フォーム入力内容の検証スクリプトの読み込みを行う<script>要素が記述されています。作成・編集ページではデータの入力とフォームの送信を行うため、入力内容の検証が必要です。--referenceScriptLibrariesを指定しておくと、作成・編集ページの最後に、検証スクリプト読み込みのためのセクションが追加されます。自前で検証スクリプトを用意するとかでなければ、このオプションを指定するようにしましょう。

 ここまでで、アプリケーションに必要なファイルが揃いました。この時点での、プロジェクトの構成は図3のようになっています(図2も併せて参照してください)。Pages/Footmarksフォルダに、CRUDに対応したページが追加されていることがわかります。Razor Pagesでは、Pagesフォルダ以下の構造がそのままサイトの構造になるので、追加されたページを呼び出すのは、たとえば/Footmarks/CreateとしてURLを指定します。

Scaffoldingを実行した直後のプロジェクト構成

図3:Scaffoldingを実行した直後のプロジェクト構成

次のページ
データベースのマイグレーションを行う

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
.NET最新版でASP.NET Core連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

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

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/15906 2023/05/26 17:21

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング