データを取り扱うためのモデルクラスを追加する
続けて、足あとデータのためのモデルクラスを追加します。モデルクラスとは、その名の通りデータを取り扱うためのクラスです。モデルクラスは、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を指定します。