情報応用演習Ⅰ(2024)

【T8a】多対多のリレーションシップ(6/8)

プロジェクトタイプ(注意: 本文参照)
プロジェクト名T8a
ソリューション名PIT8
注意
  • 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
    • 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
    • プロジェクトの作成作業については準備作業を参照せよ.

8a-6. 新たなモデルクラスの作成

まずは「サークル」を表すモデルクラスを作成してみよう.この「サークル」の情報には_に示す項目を含めることにしよう. 主キーとサークル名,そして任意でサークルの説明を含むエンティティである.

「サークル」の情報
項目名必須/任意データ型備考
ID必須整数サークルのID.
名前必須文字列サークル名.
説明任意文字列サークルの説明.

この「サークル」に対応するモデルクラスを定義しよう.クラス名は「サークル」の英語綴りであるCircleとする. まずプロジェクト内の Models フォルダを右クリックし,「追加」→「クラス」をクリックする. 作成するクラス名を訊かれるのでCircle(.csは省略可能)と入力して「追加」ボタンをクリックする. すると空のクラス定義が作られるので_の定義を書き込もう.

「サークル」クラス
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
using System.ComponentModel.DataAnnotations; // 追記

namespace T8a.Models
{
    // 「サークル」クラス
    public class Circle
    {
        [Display(Name = "ID")]
        public int Id { get; set; }

        [Display(Name = "サークル名")]
        public string Name { get; set; } = "";

        [Display(Name = "サークル説明")]
        public string? Description { get; set; }
    }
}

このクラスがデータベース側に反映されるようにするには,データコンテキストクラスにも手を加える必要がある. Data/T8aContext.cs に_に示す内容を追記しよう.

T8aContextクラスへの追記内容
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class T8aContext : DbContext
{
    public T8aContext(DbContextOptions<T8aContext> contextOptions)
        : base(contextOptions)
    { }

    public DbSet<Student> Students => Set<Student>();

    public DbSet<Department> Departments => Set<Department>();

    public DbSet<Circle> Circles => Set<Circle>(); // 追記

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Department>().HasData(
            new Department() { Id = 1, Name = "医療情報学科" },
            new Department() { Id = 2, Name = "医療栄養学科" },
            new Department() { Id = 3, Name = "医療看護学科" }
            );
    }
}

この時点で既存のほかのどのモデルクラスと独立な「サークル」というエンティティを追加したのみで, まだいかなるリレーションシップも設定していないが,ここまでをデータベースに反映させておこう. コマンドラインターミナル1_に示すコマンドを実行して, マイグレーションコードの生成とデータベースへの反映を行ってみよう(_).

マイグレーション処理の生成と適用
PS> dotnet ef migrations add AddCircle
PS> dotnet ef database update

実行したら pgAdmin でデータベースの変化も確認しておこう. pgAdmin を起動するか,もしくは pgAdmin がすでに起動中の場合は 「 Servers 」→「 PostgreSQL 16 」→「 Databases 」を右クリックして「 Refresh 」を実行する. 「 Databases 」→「 t8a_db 」→「 Schemas 」→「 public 」→「 Tables 」に,新たなテーブル「 Circles 」が 追加されていることを確認しておこう(_).

マイグレーション処理の結果を確認

  1. タブのタイトルは「開発用PowerShell」もしくは「Developer PowerShell」となっている. ↩︎

Last updated on 2024-06-10
Published on 2024-06-10

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.