【T9a】簡易ブログソフトウェアの作成 Part.Ⅰ ~ 認証機能の組み込み(5/14)
プロジェクトタイプ | ASP.NET Core Web アプリ(Model-View-Controller) |
---|---|
プロジェクト名 | T9a |
ソリューション名 | PIT9 |
ターゲットフレームワーク | .NET 8.0(長期的なサポート) |
最上位レベルのステートメントを使用しない | 使用する(チェックオフ) |
注意
- 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
- 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
- プロジェクトの作成作業については準備作業を参照せよ.
9a-5. データモデルの検討と定義
最初にデータモデルとデータコンテキストクラスを定義しよう.
「ユーザー」に相当するモデルクラスは前節で説明した通り,IdentityUser
クラスから派生したクラスとして定義する必要がある.
このエンティティには表9a-3-1のデータ項目に加えて_に示すデータ項目を追加することにする.
項目名 | 必須/任意 | データ型 | 備考 |
---|---|---|---|
ニックネーム | 任意 | 文字列 | 設定した場合はユーザー名の代わりにニックネームを表示する. |
登録日時 | 必須 | 日付時刻 | このユーザーをシステムに登録した日時. |
クラス名はBlogUser
とする.プロジェクト内の Models フォルダを右クリックし,「追加」→「クラス」をクリックする.
作成するクラス名を訊かれるのでBlogUser
(.csは省略可能)と入力して「追加」ボタンをクリックする.
すると空のクラス定義が作られるので_の定義を書き込もう.
|
|
前述した通りこのBlogUser
クラスは,IdentityUser
クラスから派生させている.
UserName
プロパティとEmail
プロパティに関しては, override キーワードを打ち込めばその実装は自動的に補完してくれる.
これらのプロパティはIdentityUser
クラスで定義されている仮想プロパティであり,ここでは基底クラスの get / set にただ転送しているだけであるため一見オーバーライドする意味はないように見えるが,
今回は[Display]
属性や[EmailAddress]
属性といった属性を設定する必要があるためあえてこのような方法をとっている.
_で示した2つのデータ項目に相当するのが,Nickname
プロパティとRegistered
プロパティである.
つぎにデータコンテキストクラスを定義する.プロジェクト内に Data というフォルダを作成し,
これを右クリックして「追加」→「クラス」をクリックする.作成するクラス名を訊かれるので
T9aContext
(.csは省略可能)と入力して「追加」ボタンをクリックする.
すると空のクラス定義が作られるので_のように書き換えよう.
|
|
これも前節で解説した通り,ASP.NET Identity の枠組みを利用するためには,通常のデータコンテキストクラスとは異なり
IdentityDbContext<TUser>
ジェネリッククラスから派生させる必要がある.
ASP.NET Core Identity のユーザークラスを拡張して使用する場合は,_のようにジェネリックパラメータ
TUser
にそのアプリの「ユーザー」として使用するモデルクラスを指定する.つまり,そのアプリで使用する「ユーザー」クラスを
IdentityUserクラスの派生クラス
と表現するならば,そのアプリのデータコンテキストクラスは
IdentityDbContext<
から派生させればよい,ということである.IdentityUserクラスの派生クラス
>
次に Program.cs と appsettings.json にそれぞれ_,_に示す内容を追記しよう.
|
|
|
|
ここまで追記したらpgAdminで_に合わせて接続ユーザーを作成して,Visual Studio でコマンドラインターミナル1でdotnet ef migrations add
/ dotnet ef database update
コマンドを実行して
データベースを構築しよう(_,_).なお今回は前回と異なりアプリケーション内で使用するデータコンテキストクラスは
_で定義したT9aContext
クラスただ一つなので-c
オプションを指定する必要はない.
データベースへのマイグレーションを済ませると,_に示す通りのテーブルが作られているはずである.
一見,_で定義したBlogUser
に相当するテーブルが作られていないように見えるかもしれないが,
今回はBlogUser
クラスに対応するテーブルはAspNetUsers
テーブルとなる.これはデータコンテキストクラスをIdentityDbContext<BlogUser>
から
派生させたためである.ASP.NET Core Identity では「ユーザー」に対応するテーブルはデフォルトではAspNetUsers
という名前をもつようになっている.
実際AspNetUsers
テーブルの定義を見ると,表9a-3-1に示す列に加えて,
Nickname
列とRegistered
列が追加されていることが分かるだろう(_).
タブのタイトルは「開発用PowerShell」もしくは「Developer PowerShell」となっている. ↩︎