【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」となっている. ↩︎



