【T9b】簡易ブログソフトウェアの作成 Part.Ⅱ ~ 記事関連機能の実装(4/11)
プロジェクトタイプ | (注意: 本文参照) |
---|---|
プロジェクト名 | T9b |
ソリューション名 | PIT9 |
注意
- 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
- 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
- プロジェクトの作成作業については準備作業を参照せよ.
9b-4. 「記事」のためのモデルクラスの作成
まずは「記事」に対応するモデルクラスを作成しよう.この「記事」の情報には_に示す項目を含めることにする.
項目名 | 必須/任意 | データ型 | 備考 |
---|---|---|---|
ID | 必須 | 整数 | 記事のID(主キー). |
タイトル | 必須 | 文字列 | 記事のタイトル. |
本文 | 必須 | 文字列 | 記事の本文. |
作成日時 | 必須 | 日付時刻 | 記事を作成した日時. |
更新日時 | 必須 | 日付時刻 | 記事を最後に更新した日時. |
公開状態 | 必須 | 列挙型 | 記事の更改状態.下書き(非公開)か公開済みかのいずれか. |
この「記事」に対応するモデルクラスを定義しよう.クラス名はArticleとする.
まずプロジェクト内の Models フォルダを右クリックし,「追加」→「クラス」をクリックする.
作成するクラス名を訊かれるのでArticle
(.csは省略可能)と入力して「追加」ボタンをクリックする.
すると空のクラス定義が作られるので_の定義を書き込もう.
|
|
このArticle
クラスは_に示したデータ項目を素直に反映させたクラスとなっている.
また,図9a-3-3で示した通り「ユーザー」と「記事」は1対多,別の言い方をすれば
「記事」はいわば「ユーザー」の所有物であるため,「ユーザ」つまりBlogUser
クラスへの
必須の (=Null非許容の)外部キーと参照ナビゲーションプロパティを含めている.
チュートリアル【T7b】で「必須な(=Null非許容な)外部キープロパティをいきなり追加してはならない」と述べたが,今回は新規にエンティティを
追加するだけ,言い換えればこの変更によって整合性違反となる 既存レコード は発生し得ない( 新規エンティティなのだからテーブルの中身は空 )ので
最初からNull非許容な外部キープロパティをもつエンティティを追加することができる1.
この参照ナビゲーションプロパティに合わせてBlogUser
クラスにもコレクションナビゲーションプロパティを追加しておこう.
Models/BlogUser.cs に_に示す内容を追記する.
|
|
Article
クラスがデータベース側に反映されるようにするには,データコンテキストクラスにも手を加える必要がある.
Data/T9bContext.cs に_に示す内容を追記しよう.
|
|
ここまで追記ができたらコマンドラインターミナル2で_に示すコマンドを 用いてマイグレーションコードの生成とデータベース側への適用を行おう(_).
PS>
dotnet ef migrations add AddArticlePS>
dotnet ef database update
実行したら pgAdmin でデータベースの変化も確認しておこう. pgAdmin を起動するか,もしくは pgAdmin がすでに起動中の場合は 「 Servers 」→「 PostgreSQL 16 」→「 Databases 」→「 t9b_db 」→「 Tables 」を右クリックして「 Refresh 」を実行する. t9b_db に,新たなテーブル「 Articles 」が追加されていることを確認する(_).
チュートリアル【T7b】では 既にレコードが作成されているテーブル に対して,外部キー制約をもつ必須の(≒NOT NULLな)列を追加したために整合性違反が発生していた.このためエンティティの追加と,それを参照する外部キープロパティの追加にマイグレーションを分割する必要があった.今回は新規にエンティティを作成する,すなわち新たな 空の テーブルを作成するだけであるので,したがって整合性違反となるレコードも発生し得ない.このために今回は必須の外部キープロパティを最初から定義することができる. ↩︎
タブのタイトルは「開発用PowerShell」もしくは「Developer PowerShell」となっている. ↩︎