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

