インクリメンタルなカイハツにっき

.NET 開発手法を中心に、これから始める方の一助となる記事を載せていく予定です。

実践 Entity Framework ~ 文字列の長さと NOT NULL の指定

Entity Framework で Code First Migrations。

前回、プロパティに属性を付けることにより、キーを設定することが可能になりました。属性を利用することにより、ほかにも指定可能な項目があります。今回は、文字列の長さと NOT NULL を指定してみます。

文字列長は MaxLength(StringLength)

データ型が string のプロパティの場合、特に指定がない場合は、nvarchar(max) となります。
System.ComponentModel.DataAnnotations.MaxLengthAttribute クラスを属性とすることで、文字列の長さが指定可能です。

[MaxLength(10)]
public string Name { get; set; }

パラメータに指定した数値が文字数となります。
ちなみにバイト数ではなく文字数です。日本語であっても指定した数値分の文字が格納可能です。

同じ名前空間に、StringLengthAttribute が存在し、こちらでも同じように指定が可能です。
差は・・・わかりません・・・同じです。たぶん。

NOT NULL は Required

データ型が、string のプロパティの場合、NULL 許容となります。
これは、CLR側とイコールなところがあり、例えば、

  • int は NOT NULL の INT
  • datetime は NOT NULL の datetime2 *1

となります。

ということは・・・
データ型を int? や datetime? とすると・・・そうです。NULL 許容になります。

System.ComponentModel.DataAnnotations.RequiredAttribute クラスを属性とすることで、NOT NULL の指定が可能となります。

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

テーブルを再作成

以上を踏まえて属性を付与し、もう一度テーブルを作成してみます。
コードは5文字、名称とカナは10文字までとし、コードはキー、名称は必須項目とします。

public class Prefecture
{
    [Key]
    [MaxLength(5)]
    public string Code { get; set; }

    [Required]
    [MaxLength(10)]
    public string Name { get; set; }

    [MaxLength(10)]
    public string Kana { get; set; }
}

エンティティクラス

前回の作成分は、以前紹介した方法で一度戻し、もう一度作成します。

マイグレーション

すると・・・

テーブル結果

意図したテーブルとなりました!

属性はまだ他にも存在します。次回はテーブル、フィールド名の変更方法を紹介します。
続きはこちら・・・

*1:SQL Server 側のデータ型は、SQL Server のバージョンにより、異なる可能性があります。