ビルトインのモデル検証
EFコードファーストでは、モデル層にビジネスルールを実装する時に、どの検証方法でも使用できます。これにより、大きな柔軟性とパワーが得られます。
今週のCTP5リリースから、.NET 4にビルトインされているDataAnnotationおよびIValidatorObject検証サポートが、ともにビルトインサポートとしてEFコードファーストに含まれるようになります。これにより、モデル上で簡単に検証ルールを実装し、モデル層を保存する際に自動的にEFコードファーストが必ずそれらのルールを実行するようにできます。また、非常に便利な『自由な』方法で、アプリケーションでの検証が行えます。
NorthwindモデルにDataAnnotationsを適用
以下のコード例は、『Product』モデルの2つのプロパティへ、いくつかの宣言的検証ルールを追加する方法を示しています。

上記では、[Required]と[Range]属性を使用しています。これらの検証属性は、.NET 4にビルトインされているSystem.ComponentModel.DataAnnotations名前空間にあり、EFとは別に使用できます。それらに特定されているエラーメッセージは、明示的に定義すること(上記のように)も、リソースファイルから取得すること(アプリケーションのローカライズが簡単になります)も可能です。
SaveChanges上で検証の強制実行
EFコードファースト(CTP5以降)は、モデルオブジェクトが更新または保存された時に、DataAnnotationルールを自動的に適用および強制実行します。これを強制実行するためのコードを書く必要はありません。このサポートは、現在はデフォルトで実行可能です。
この新しいサポートは、以下のコードを意味しています。上記のルールに違反した場合、NorthwindのDbContext上の『SaveChanges』メソッドを呼び出すと、例外が自動的に投げられます。

SaveChangesメソッドが呼び出された時に発生するDbEntityValidationExceptionには、モデルが保存しようとした時に起こったすべての検証エラーを、一覧で取得するのに使用できる『EntityValidationErrors』プロパティが含まれています。これにより、簡単にユーザーへ修正方法が示せます。EFコードファーストは、もし検証ルールが違反されれば、データベースを必ず適正で整合性のある状態に保っておくために、すべての変更トランザクションを中止します。
EFコードファーストの検証強制実行は、ビルトインの.NET DataAnnotation(Required、Range、RegularExpression、StringLengthなど)、およびSystem.ComponentModel.DataAnnotations.ValidationAttributeベースクラスのサブクラスで作成した独自の検証ルールの両方で動作します。
UI検証サポート
.NETにある多くのUIフレームワークが、DataAnnotationベースの検証ルールをサポートしています。例えば、ASP.NET MVC、ASP.NET Dynamic Data、Silverlight(WCF RIAサービス経由)はすべて、モデルオブジェクトに適用されたDataAnnotationルールに従う、クライアントサイドの検証UIの表示をサポートしています。
以下のスクリーンショットは、ASP.NET MVC 3アプリケーションで値が適切でなかった場合に、適切な検証エラーメッセージを表示させる時の、デフォルトの[追加]-[ビュー]スカフォールドテンプレートの使用方法を示しています。

ASP.NET MVC 3は、クライアントサイドおよびサーバーサイドの両方で、これらの検証ルールをサポートしています。表示されるエラーメッセージは、独自にコードを書く必要なく、宣言的検証属性から自動的に選択されます。
DRYに保つ
『DRY原理』は、『Do Not Repeat Yourself』の頭文字を取ったもので、アプリケーション内で複数個所に渡り、ロジック/構成/コードを重複しないようにし、1か所で指定してすべてにそれを適用することを推奨したベストプラクティスのことです。
EFコードファーストCTP5では、モデルクラス上に宣言的DataAnnotation検証を適用し(1か所で指定し)、コントローラ、ビュー、クライアントサイドスクリプトや、またモデルクラスを更新、操作する独自のコードを含む、すべてのアプリケーションシナリオで、その検証ロジックが強制実行(そして対応したエラーメッセージを表示)するようにできます。
これにより、クリーンなコードの良いアプリケーションや、素早く反復、展開できるアプリケーションを、簡単に構築できるようなります。
