データを取り扱うためのモデルクラスを追加する
続けて、足あとデータのためのモデルクラスを追加します。モデルクラスとは、その名の通りデータを取り扱うためのクラスです。モデルクラスは、Scaffoldingに先立ち手作業で追加します。
まず、プロジェクトのルート直下に、「Models」という名前のフォルダを追加します。Modelsフォルダはプロジェクト作成直後は存在しませんが、モデルクラスのファイルを格納するフォルダです。そのModelsフォルダに、「Footmark」という名前のモデルクラスを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つのプロパティがあります。
| プロパティ | データ型 | 概要 |
|---|---|---|
| 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に示します。
| オプション | 説明 |
|---|---|
| -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を指定します。
図3:Scaffoldingを実行した直後のプロジェクト構成
