RazorPagesプロジェクトの基本的な作成方法をまとめていきます。プロジェクトの作成からコードファーストでスキャフォールディング・DB作成までの手順を記載します。
【検証環境】VisualStudio2022 / .NET6.0
公式ドキュメント:https://docs.microsoft.com/ja-jp/aspnet/core/tutorials/razor-pages/?view=aspnetcore-6.0
RazorPagesとは
RazorPagesとは、ページ単位でのWebアプリ開発のためのフレームワークです。
MVCではコントローラーを使用して複数ページのアクションをまとめて定義しますが、RazorPagesの場合は1ページ1ファイルといった構造になります。フォルダ構造がルーティング構造になるため、ぱっと見でルーティングが分かりやすいです。
また、RazorPagesではコントローラーが存在しません。代わりに、コントローラーとビューモデルをひとまとめにしたcshtml.csファイルがあります。ここにコントローラーで書いていた処理を書くことになります。
プロジェクトの作成
RazorPagesアプリを作成
1.[ASP.NET Core Web アプリ] を選択して、[次へ] を押下します
2.プロジェクト名を入力して、[次へ] を押下します
3..NET6.0を選択し、[作成] を押下します。
プロジェクトのフォルダ構成を確認
Pagesフォルダが存在することが確認できます。この中にRazorページとサポートファイルが含まれます。サポートファイルは名前がアンスコから始まるファイルです。MVCでも同様に存在していました。
cshtmlファイルをよく見てみると、階層になっていることが分かります。選択してみると、cshtml.csファイルが包含されていることが確認できます。WPFのxamlとxaml.csのような構成になります。
モデルの作成
今回はEntityFramework Core を使ったコードファーストでアプリを作っていきます。まずは下記手順でモデルを作成します。
1.プロジェクト直下にModelsフォルダを作成
2.Modelsフォルダ内にPersonクラスを作成
using System.ComponentModel.DataAnnotations;
namespace RazorPagesSample.Models
{
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int GenderId { get; set; }
}
}
3.Modelsフォルダ内にGenderクラスを作成
外部キー用にGenderクラスも作成します。GenderテーブルとPersonテーブルは1対多の関係としますので、下記のようにします。外部キープロパティとナビゲーションプロパティはセットで定義します。
using System.ComponentModel.DataAnnotations;
namespace RazorPagesSample.Models
{
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
//外部キープロパティ
public int GenderId { get; set; }
//ナビゲーションプロパティ
public Gender Gender { get; set; }
}
}
スキャフォールデイング
作成したPersonモデルをもとに、CRUD処理を行うページを下記手順で自動生成します。
1.プロジェクトに「Microsoft.EntityFrameworkCore.Design」をインストール
PM> Install-Package Microsoft.EntityFrameworkCore.Design
2.PagesフォルダにPersonsフォルダを作成
※フォルダ名とクラス名が同じだと名前空間と競合するので、フォルダ名はクラス名の末尾に「s」を付けるなどして重複しないようにします。
3.Personsフォルダを右クリックして、[追加] > [新規スキャフォールディングアイテム] を押下
4.[Entity Framework を使用するRazor ページ(CRUD)] を選択して、[追加] を押下
5.[モデルクラス] と [データコンテキストクラス] を選択して [追加] を押下
データコンテキストクラスは[+]ボタンを押下して自動で入力されるので、[追加]を押下でOK
スキャフォールディングには多少時間がかかります。しばらくすると自動でファイルが作成されます。
また、Dataフォルダも自動で作成されており、ここにはコンテキストクラスが格納されています。
データベースの作成
スキャフォールディングでページとCRUD処理が自動で作成されましたが、まだデータベース自体が作成されていません。この状態で実行してもエラーになるので、データベースを作成する必要があります。
パッケージマネージャーコンソールから下記コマンドを実行します。
PM> Add-Migration InitialCreate
PM> Update-Database
実行が成功すると、localdbにデータベースとテーブルが作成されます。localDBはSSMSのWindows認証でサーバー名「(localdb)mssqllocaldb」で接続できます。
実際に確認すると、データベースとテーブルが作成されています。外部キーもばっちりです。
接続文字列はappsettings.jsonに記述してあります。接続先を変更したい場合はここを修正する必要があります。変更後にUpdate-Databaseを行えば別のサーバーにもテーブル作成が可能となります。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"RazorPagesSampleContext": "Server=(localdb)\mssqllocaldb;Database=RazorPagesSampleContext-dcaf4233-8d83-4a16-bbae-b1270ee9e364;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
ここまでの手順を踏んだ上でアプリを実行してみます。実行後、https://localhost:*****/persons にアクセスすると、自動で作成されたページが開けることが確認できます。