1. ホーム
  2. c#

[解決済み] Entity FrameworkのマイグレーションにおけるRequiredフィールドのデフォルト値?

2023-02-12 12:51:23

質問

私は [Required] データアノテーションを追加しました。 ASP.NET MVC アプリケーション . マイグレーションを作成した後 Update-Database コマンドを実行すると、次のようなエラーが発生します。

値 NULL を列 'Director' に挿入することはできません、テーブル 'MOVIES_cf7bad808fa94f89afa2e5dae1161e78.dbo.Movies'; 列は NULL を許可していません。 列は NULL を許可しません。UPDATE に失敗しました。文は終了されました。

これは、一部のレコードの Director カラムに NULL を持つレコードがあるためです。これらの値を自動的にデフォルトの (たとえば "John Doe") ディレクタに変更するにはどうすればよいですか?

以下は私のモデルです。

  public class Movie
    {
        public int ID { get; set; }
        [Required]
        public string Title { get; set; }

        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }

        [Required]
        public string Genre { get; set; }

        [Range(1,100)]
        [DataType(DataType.Currency)]
        public decimal Price { get; set; }

        [StringLength(5)]
        public string Rating { get; set; }

        [Required]     /// <--- NEW
        public string Director { get; set; }
    }

で、これが私の最新のマイグレーションです。

public partial class AddDataAnnotationsMig : DbMigration
{
    public override void Up()
    {
        AlterColumn("dbo.Movies", "Title", c => c.String(nullable: false));
        AlterColumn("dbo.Movies", "Genre", c => c.String(nullable: false));
        AlterColumn("dbo.Movies", "Rating", c => c.String(maxLength: 5));
        AlterColumn("dbo.Movies", "Director", c => c.String(nullable: false));
    }

    public override void Down()
    {
        AlterColumn("dbo.Movies", "Director", c => c.String());
        AlterColumn("dbo.Movies", "Rating", c => c.String());
        AlterColumn("dbo.Movies", "Genre", c => c.String());
        AlterColumn("dbo.Movies", "Title", c => c.String());
    }
}

どのように解決するのですか?

私の記憶が正しければ、このように動作するはずです。

AlterColumn("dbo.Movies", "Director", c => c.String(nullable: false, defaultValueSql: "'John Doe'"));

注意:defaultValueSqlパラメータの値はそのままのSQL文として扱われるため、John Doeの例のように必須値が事実上文字列である場合、値の周りにシングルクォートが必要です。