実践 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 のバージョンにより、異なる可能性があります。