情報応用演習Ⅰ(2024)

【T7a】データモデルの変更とマイグレーションの設計(6/7)

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

7a-6. マイグレーション処理の削除

次にマイグレーション処理の削除を試みてみよう.

マイグレーション処理を削除するには dotnet ef migrations remove コマンドを使用する.このコマンドは 直前に生成した マイグレーションコードを削除する. 注意するべきは,すでにデータベースにそのマイグレーション処理を適用済み(≒「dotnet ef database update」を実行済み)である場合は, このコマンドを実行する前に データベース側を,削除しようとしているマイグレーション処理を適用前の定義に差し戻しておく 必要があることである. 現状ではChangeMiddleNameがすでに適用済みの状態であるため,このコマンドを実行するとデータベースに適用済みのマイグレーションコードを,適用を取り消さずに削除しようとしていることになり,エラーとなる.

このことを確認しておこう.コマンドラインターミナル 1_に示すコマンドを実行してみよう.

マイグレーション処理の削除
PS> dotnet ef migrations remove

すると,_に示すようなエラーメッセージが表示されるはずである.

マイグレーション処理の削除エラー

エラーメッセージを抜粋すると以下のようなメッセージとなっているはずである.

The migration '20240305051059_ChangeMiddleName' has already been applied to the database.
Revert it and try again. If the migration has been applied to other databases,
consider reverting its changes using a new migration instead.

このエラーメッセージを訳すならば以下のようになるだろう.

マイグレーションマイグレーション名は既にデータベースに適用済みです.
それを取り消してからもう一度試してください.このマイグレーションがほかのデータベースにも適用済みである場合は,
新しいマイグレーションを使ってその変更を打ち消すことを検討してください.

指摘されているように,マイグレーションChangeMiddleNameを削除するには,データベース側に既に適用されているChangeMiddleNameの処理を取り消して,その直前のデータベース定義に差し戻す必要がある.

このデータベース定義の差し戻しには前節で説明した通り dotnet ef database update コマンドを使用すればよい. 今回の場合,このChangeMiddleNameの直前のマイグレーション処理はAddMiddleNameである. この時点までデータベース定義を差し戻すために,コマンドラインターミナル 1_に示すコマンドを実行しよう.

マイグレーション処理の取り消しと削除
PS> dotnet ef database update AddMiddleName
PS> dotnet ef migrations remove

_によって, Migrations フォルダの .cs ファイルも削除される(__). pgAdmin で Students テーブルの全内容を確認しておこう(_).

マイグレーション処理の取り消しと削除の確認

また_に示すようにStudentクラスの定義も元に戻しておこう.

プロパティ名を元に戻す
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Student
{
    [Display(Name = "ID")]
    public int Id { get; set; }                   // ID

    [Display(Name = "姓")]
    public string LastName { get; set; } = "";    // 姓

    [Display(Name = "ミドルネーム")]
    public string? MiddleName { get; set; }       // ミドルネーム
    
    [Display(Name = "名")]        
    public string FirstName { get; set; } = "";   // 名

    [Display(Name = "性別")]
    public SexType Sex { get; set; }              // 性別

    [Phone]        
    [Display(Name ="電話番号")]
    public string PhoneNumber { get; set; } = ""; // 電話番号

    [EmailAddress]
    [Display(Name = "メールアドレス")]
    public string? Mail { get; set; }             // メールアドレス

    [DataType(DataType.Date)]
    [Display(Name = "誕生日")]
    public DateTime? Birthday { get; set; }       // 誕生日

    [DataType(DataType.DateTime)]
    [Display(Name = "登録日時")]
    public DateTime Registered { get; set; }      // 登録日時
}

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

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

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