EntityFramework Code First:DataAnnotation を使用してコンフィグレーションを行う

samatsu 7/9/2015 3752 N/A Code First

System.ComponentModel.DataAnnotations 名前空間のDataAnnotation Attribute クラスを使用することで、 Convention(規約)を変更したり、追加の情報をEntity Framework Code First に伝えることができるようになります。別の方法として、Fluent API を使用して、データベースとのマッピング等同様のコンフィグレーションを行うこともできます。

Entity Framework 4 Code First で使用できる DataAnnotations は、次のURL でリストされています。下記URLのData Annotation 属性は2つのアセンブリに含まれています。.NET 4.0にもともと含まれているSystem.ComponentModel.DataAnnotations.dllとNuGetから取得するEntityFrameworkのアセンブリEntityFramework.dll です。

Code First でData Annotatinを使用する外部の参考ページを記載しておきます。

Code First Data Annotations
https://msdn.microsoft.com/en-us/data/jj591583.aspx

使用例は上記URLに掲載されています。もしくは、@ITの記事Entity Framework 4.1入門が参考になります。
はじめての EntityFramework 4 CodeFirstでもCode Firstのサンプルを作成していますので、何かのヒントになるかもしれません。

Code First でサポートされている DataAnnotations Attributeの簡単な日本語の説明を記載しておきます。

属性 説明
ColumnAttribute データベースのカラム名,データ型を指定する。Orderプロパティは複合キーのキーの順番を設定するために使用する。
ComplexTypeAttribute 複合型を表すクラスに設定する。Convention(規約)ではキー属性がないクラスは複合型と判断される。
ConcurrencyCheckAttribute TimeStampeAttribute を使用してオプティミスティックな排他制御を行わない場合で、ほかのプロパティで排他制御のチェックを行う場合にしのプロパティに付与する。
DatabaseGeneratedAttribute 値がDB側で自動生成されるかを設定する。int 型のキー属性の場合、規約によって自動的にIdentity(自動生成)とみなされるので、そうでない場合はDatabaseGenerationAttributeでアノテートし、値の生成方法を設定する必要がある。
ForeignKeyAttribute 外部キーの関連を指定するために使用する。ナビゲーションプロパティーに付与して外部キーのプロパティ名を指定する。もしくは、外部キープロパティに付与して、ナビゲーションプロパティ名を指定する。
InversePropertyAttribute 付与したナビゲーションプロパティに対応する別のクラスのナビゲーションプロパティを指定する。1つのクラスと別のクラスの関連が2つ以上ある場合にEntityFramework にどのナビゲーションプロパティと他方のナビゲーションプロパティが対応するのかを設定するために使用する。例えば、本(Bookクラス)と関連する著者(Personクラス)関連と同じく本(Bookクラス)に関連するレビュワー(Personクラス)関連を表す場合。
KeyAttribute 主キーを表すプロパティに付与する。規約では Id という名前や クラス名+Id という名前のプロパティが主キーと判定される。複合キーを表す場合は、ColumnAttributeのOrder と組み合わせて使用する
MaxLengthAttribute 文字列の最大長を表すために使用する
MinLengthAttribute 文字列の最小長を表すために使用する。データベースのカラムのスキーマには影響を与えない。
NotMappedAttribute EntityFramework にデータベースとマッピングしないことを設定するために使用する。EntityFrameworkにサポートされたい型(enum等)はNotMappedAttributeを付与しなくても無視される。
RequiredAttribute 必須であることを設定するために使用する。規約ではスカラー型は必須。ナビゲーションプロパティはオプションになる。スカラー型でもNullableを使用すればオプションとみなされる。
StringLengthAttribute 文字列の最小長/最大長を表すために使用する。本属性は MaxLength,MinLengthと異なり、 System.ComponentModel.DataAnnotations.dllで定義されているため、DynamicData からもメタ情報として認識される。
TableAttribute テーブルの名前やスキーマ名(既定では dbo ) を指定するために使用する
TimestampAttribute TimeStampe(RowVersion)用のプロパティであることを指定する。クラスのプロパティに1つだけ定義でき、型はbyte[]。オプティミスティック並行実行制御の排他制御に使用される。
IndexAttribute 修飾したプロパティの列でインデックスを作成します。コンストラクターの第1引数でインデックス名を指定できます。複合インデックスの場合は、コンストラクターの第2引数にインデックスの順番を指定します。