【T5a】モデルとデータベースの連携(前編)(3/5)
| プロジェクトタイプ | ASP.NET Core Web アプリ(Model-View-Controller) |
|---|---|
| プロジェクト名 | T5a |
| ソリューション名 | PIT5 |
| ターゲットフレームワーク | .NET 8.0(長期的なサポート) |
| 最上位レベルのステートメントを使用しない | 使用する(チェックオフ) |
注意
- 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
- 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
- プロジェクトの作成作業については準備作業を参照せよ.
5a-3. モデルクラスの作成
最初にアプリ内で管理するモデルクラスを作成することにしよう. このアプリでは「学生」に関する情報を管理する.このアプリで管理するデータは唯一これのみで 他のいかなる実体も含まない.この「学生」の情報には_に示す項目を含めることにしよう.
| 項目名 | 必須/任意 | データ型 | 備考 |
|---|---|---|---|
| ID | 必須 | 整数 | 学生の通し番号 |
| 姓 | 必須 | 文字列 | 上の名前. |
| 名 | 必須 | 文字列 | 下の名前. |
| 性別 | 必須 | 列挙型 | 性別. |
| 電話番号 | 必須 | 文字列 | 連絡先の電話番号.必須. |
| メールアドレス | 任意 | 文字列 | メールアドレス(携帯電話などの学外のメールアドレス). |
| 誕生日 | 任意 | 日付 | 誕生日(日付部分のみ).登録は任意であることにする. |
| 登録日時 | 必須 | 日付時刻 | その学生をシステムに登録した日時(日付と時刻を含む). |
まずはこの「学生」に対応するモデルクラスを定義しよう.クラス名は「学生」を単純に
英訳して Student とする.まずプロジェクト内の Models フォルダを右クリックし,「追加」→「クラス」をクリックする.
作成するクラス名を訊かれるのでStudent(.csは省略可能)と入力して「追加」ボタンをクリックする.
すると空のクラス定義が作られるので_の定義を書き込もう.
| |
人物にかかわる情報を扱う際に「性別」の情報を定義しなければならない場面は多々あるが,
ここではそのための列挙型SexTypeを定義している.ちなみに性別をコンピューターシステムで表現する
方法には
ISO - ISO/IEC 5218:2004 - Information technology — Codes for the representation of human sexes
という国際工業規格がある._のSexType列挙型はそれに基づくものである.
「学生」クラスは_に示した項目をすべて含んでいるが,必須や任意といった制限事項や,
例えばその文字列型のプロパティが,文字列は文字列でも どのようなデータの容れ物なのか,すなわち電話番号やメールアドレス,またはパスワードなのか,
といった情報が含まれていない.また前節でも登場した表示名も現れていない.このような制限やメタデータは前節で説明した通り
プロパティの型や属性によって表現する必要がある.それではこのプレーンなStudentクラスに,
そのような制限やメタデータを追加していこう.
まずは必須/任意といった制限から反映させていこう.ASP.NET Core ではプロパティの型が null を代入可能な型かそうでないかによって
必須/任意を識別する._のプレーンなクラス定義では,すべてのプロパティはNull非許容であるためすべての
プロパティが必須の項目となっている._によれば「メールアドレス」や「誕生日」の項目は任意であるため
これらの部分が食い違ってしまう.そのプロパティを任意の項目に設定するには,そのプロパティの型を
Null許容型に,つまり型名に?をつける必要がある.これを踏まえてStudentクラスを_のように変更しよう.
| |
「メールアドレス」に対応するMailプロパティ,それから「誕生日」に対応するBirthdayプロパティをNull許容型にした.
Null許容型は任意の項目となり,それ以外のNull非許容な型のプロパティはデータベースのテーブル上でもIS NOT NULL制約が付加される.
また,それ以外のNull非許容な参照型のプロパティであるLastName,FirstName,PhoneNumberプロパティには
デフォルト値として空文字列("")を指定している(Null非許容参照型のプロパティにはなんらかの初期値を指定しておく必要がある).
つぎにデータ型の詳細について指定することにしよう.「メールアドレス」や「電話番号」はともに文字列型のプロパティであるが,
これらに格納されるデータの内容について注釈を行うことで様々な最適化が行われることが期待できる.
また,「誕生日」や「登録日時」はともにDateTime型のプロパティであり,DateTime型は日付と時刻の両方の情報を含む型であるが,
前者は時刻を含まない日付のみの項目,後者は日付と時刻込みの項目である.これらに関しても注釈が必要である1.
このように同じ型であってもその格納内容に特別な意味付けがある場合は,_に示すような
属性を適用することでデータの意味付けを注釈することが可能である.なお,_は使用可能な属性の一部である.
これらの属性を指定することによって,そのデータを格納するデータベースのテーブルの列にそれに適したデータ型が選択されたり,
これらのデータを入力するためのフォームの入力欄でそれらに適した入力補助が表示される,といった効果がある.
| 属性 | 意味 |
|---|---|
[EmailAddress] | Eメールアドレスを表す. |
[Phone] | 電話番号を表す. |
[DataType(DataType.Date)] | 日付を表す. |
[DataType(DataType.DateTime)] | 日付と時刻を表す. |
[DataType(DataType.Text)] | テキストを表す. |
[DataType(DataType.MultilineText)] | 複数行テキストを表す. |
[DataType(DataType.Html)] | HTMLを表す. |
[DataType(DataType.Password)] | パスワードを表す. |
「電話番号」,「メールアドレス」,「誕生日」,「登録日時」のプロパティに上述のような属性を適用してみよう.
このためにはまず_に示すusingディレクティブをソースコードの冒頭に追記してから,
Studentクラスを_のように変更しよう.
| |
| |
仕上げとしてこのモデルクラスのすべてのプロパティの表示名を指定しておこう.表示名は前節で説明したように,
プロパティに[Display]属性を付与することで指定することができる.Studentクラスを_のように変更しよう.
| |
ついでに 列挙型の表示名も指定しておこう .[Display]属性は列挙型内の値にも指定することが可能である.
SexTyp列挙型にも_のように[Display]属性を指定しよう.
| |
以上はモデルクラスの定義は完了である.次節ではこのクラスをもとにテーブル定義を作成する方法を学ぶ.
.NET 6 以降ではDateOnly構造体やTimeOnly構造体といったデータ型が追加されているため,これを用いる方法もある. ↩︎