[ASP.NET Core][入門] 第7回:モデルの追加方法を覚えよう

スポンサーリンク

はじめに

前回の記事では、レイアウトの編集方法について学習しました。

今回は、モデルの追加方法について学習していきます。

 

モデルクラスを作成しよう

ソリューションエクスプローラーで Models フォルダーを右クリックして、[追加]-[クラス]を選択し、ファイル名を「AddressItem.cs」にします。

クラスの追加

クラスの追加

コードは、以下のように編集します。

using System.ComponentModel.DataAnnotations;

namespace AddressBookApp.Models
{
    public class AddressItem
    {
        // Id(主キー用)
        public int Id { get; set; }
        // 郵便番号
        public string? ZipCode { get; set; }
        // 州(県)
        public string? State { get; set; }
        // 番地
        public string? StreetAdress { get; set; }
        // 名前
        public string? FirstName { get; set; }
        // 苗字
        public string? LastName { get; set; }
        // 電話番号
        public string? PhoneNumber { get; set; }
        // メールアドレス
        public string? Email { get; set; }

    }
}

Id は主キー用。string の後の疑問符は、そのプロパティが Null 許容であることを示し、Null値であってもエラーが発生しないようにします。

 

スキャフォールディングツールを使用して CRUD ページを作成しよう

次にスキャフォールディングツールを使用して CRUDページを作成します。

 

CRUDとは?

CRUDとは、Create(作成)、Read(読み込み)、Update(更新)、Delete(削除)の頭文字を取ったもので、データベース操作における基本的な4つの機能を指します。

  • Create(作成): 新しいデータをデータベースに追加する操作です。例えば、住所情報を登録する際に使用されます。
  • Read(読み込み): データベースからデータを取り出す操作です。住所一覧を表示したり、特定の住所情報を取得したりする際に使用されます。
  • Update(更新): 既存のデータを変更する操作です。住所情報を修正する際に使用されます。
  • Delete(削除): データベースからデータを削除する操作です。不要になった住所情報を削除する際に使用されます。
ほとんどのデータベースを扱うアプリケーションは、このCRUDの4つの機能を備えています。なぜなら、これらの機能は、データの永続化(データを保存し、いつでもアクセスできるようにすること)に不可欠だからです。

スキャフォールディングとは?

スキャフォールディングとは、ソフトウェア開発において、反復的な作業を自動化し、開発初期段階の生産性を高めるための技術です。特に、Webアプリケーション開発において、データベースとの連携や、CRUD操作(Create, Read, Update, Delete)に必要なコードを自動生成することで、開発者がより高レベルなロジックに集中できるようにします。

  1. モデルの定義: データベースのテーブルに対応するモデルクラスを定義します。
  2. スキャフォールディングの実行: 開発環境のツールやコマンドを使用して、モデルクラスに基づいてコントローラー、ビュー、マイグレーションファイルなどを自動生成します。
  3. カスタマイズ: 生成されたコードを必要に応じてカスタマイズします。

 

前置きが長くなりましたが、スキャフォールディングで  CRUD ページを作成してみましょう。

ソリューション エクスプローラーで、Controllers フォルダーを右クリックし、[追加] > [新規スキャフォールディング アイテム] の順に選択します。

新規スキャフォールディング

新規スキャフォールディング

 

続いて、[新しいスキャフォールディング アイテムの追加] ダイアログの左側のペインで、[インストール済み] > [共通] > [MVC] を選びます。

一覧から [Entity Framework を使用したビューがある MVC コントローラー]  を選択して [追加] を選択します。
新規スキャフォールディングアイテムの追加

新規スキャフォールディングアイテムの追加

 

[Entity Framework を使用したビューがある MVC コントローラーを追加する] ダイアログが表示されます。

  • [モデル クラス] ドロップ ダウンで、 [AddressItem (AddressBookApp.Models)] を選択します。
  • [データ コンテキスト クラス] 行で、[+] (プラス) 記号を選択します。
    [データ コンテキストの追加] ダイアログで、クラス名 AddressBookApp.Data.AddressBookAppContext が生成されます。
    [追加] を選択します。
  • [データベース プロバイダー] ドロップダウンで、[SQLite] を選びます。
    ビュー と コントローラー名: 既定値のままにします。
    [追加] を選択します。
    注意:筆者はSQLiteを選択しましたが、任意のデータベースを選択して構いません。

最後に [追加]ボタンをクリックします。

MVCコントローラーの追加

MVCコントローラーの追加

 

上記の操作で、以下ファイルが作成されます

  • Controllers フォルダー配下に、AddressItemsController.cs
  • Vies/AddressItems フォルダー配下に
    Create.cshtml
    Delete.cshtml
    Details.cshtml
    Edit.cshtml
    Index.cshtml
  • Dataフォルダー配下に、AddressBookAppContext.cs

データベースの作成

この段階では、まだデータベースは作成されていません。

Visual Studio の[ツール] メニューで、[NuGet パッケージ マネージャー] > [パッケージ マネージャー コンソール] を選択して、次のコマンドを実行します。

Add-Migration InitialCreate
Update-Database

 

Add-Migration InitialCreate と Update-Database コマンドの解説

コマンドの目的

これらのコマンドは、主にEntity Framework Coreという、.NETのオブジェクトリレーショナルマッピング(ORM)ツールを使用する際に、データベースの構造を管理するために用いられます。

各コマンドの役割

Add-Migration InitialCreate:新しいマイグレーションの作成: このコマンドを実行すると、Migrationsフォルダ内に新しいマイグレーションファイルが生成されます。生成されたファイルには、データベースの初期状態(テーブルの作成、カラムの定義など)を記述したC#コードが含まれています。
Update-Database:データベースへの反映: このコマンドを実行すると、直前に作成されたマイグレーションファイルに記述された内容に基づいて、データベースの構造が変更されます。
具体的には: テーブルが作成されたり、既存のテーブルにカラムが追加されたりします。

アプリの動作確認

それではアプリの動作確認をしてみましょう。
https://localhost:{ポート番号}/AddressItems  にアクセスすると、以下のように一覧を表示するページが表示されます。

住所録アプリ -一覧表示-

住所録アプリ -一覧表示-

 

「Creat New」のリンクをクリックすると、新規住所の追加ページが表示されるので、任意のデータを入力して[Create]ボタンをクリックしてみましょう。

新規データ入力画面

新規データ入力画面

 

データ追加後は、以下のように一覧表示画面に遷移します。

データの横には Edit, Details, Delete のリンクがあり、これらのリンク先も機能するように作成されています。

データ追加後の画面

データ追加後の画面

 

まとめ

記事が長くなってしまいましたが、実際に操作したのは、モデルの作成と、スキャフォールディングの実行とコマンドの実行だけです。

たったこれだけで、データベースの作成と、実際に機能するアプリを作成することができます。

ぜひ、手を動かして体感をすることをお勧めします。

Please follow and like us:

コメント

タイトルとURLをコピーしました