Dynamic Dataで活用される属性クラス
Dynamic Dataでは、データモデルに対して属性を指定して、データフィールドとの結びつけを行います。属性クラスはSystem.ComponentModel.DataAnnotations名前空間にある属性クラスを使用します。属性を指定し、検証規約を定めることで、新規項目追加時や編集時に入力検証を実施できます。
実際にデータモデルに直接属性クラスを記述することもできますが、パーシャルクラスを使用する方がカスタマイズしている部分を明示的に分離できるため、そちらで指定することが一般的でおすすめです。

Dynamic Dataで使用する属性クラスは次のとおりです。
| 属性クラス | 概要 |
| ConcurrencyCheckAttribute | 楽観同時実行制御チェック時の列のデータ型を指定 |
| CustomValidationAttribute | カスタムメソッドを指定 |
| DataTypeAttribute | メールアドレスや電話番号など、特殊な追加型を指定 |
| DisplayAttribute | データの表示文字列を指定 |
| DisplayColumnAttribute | 外部キー使用時に、参照先テーブルの最初の列を表示する列の指定 |
| DisplayFormatAttribute | データフィールドの表示方法と書式を指定 |
| EditableAttribute | データフィールドの編集の有無を指定 |
| EnumDataTypeAttribute | 列挙型をデータ列に紐づける |
| FilterUIHintAttribute | フィルタ時の処理ヒントを指定 |
| KeyAttribute | エンティティ識別のキーを指定 |
| MetadataTypeAttribute | メタデータクラスを指定 |
| RangeAttribute | 値の数値範囲を指定 |
| RegularExpressionAttribute | 正規表現を指定 |
| RequiredAttribute | 必須項目を指定 |
| ScaffoldColumnAttribute | データ列にスキャフォールディングを使用するかどうかを指定(Global.asaxファイルのScaffoldTableAttributeの個別に列指定を実施する属性クラス) |
| StringLengthAttribute | 最小/最大文字長を指定 |
| TimestampAttribute | 列のデータ型を一意の形で指定 |
| UIHintAttribute | データフィールドの表示に使用されるユーザーコントロールなどを指定 |
| ValidationAttribute | 検証属性の基本クラス |
以下、簡単に使用例を記載します。
using System.ComponentModel.DataAnnotations;
namespace DDSample.Model
{
// Employeesクラスのパーシャルクラス
[MetadataType(typeof(EmployeesAnnotation))]
public partial class Employees
{
}
public class EmployeesAnnotation
{
// 必須入力チェックのRequiredAttribute属性を指定
[Required]
public Int32 EmployeeID
}
名前空間を指定し、EDMのパーシャルクラスを作成し、属性クラスを指定します。上記サンプルでは必須入力チェックを実施するRequiredAttribute属性を指定しています。このような形でEDMなどのデータソースに対して検証ルールの付加をしていくパターンが、属性クラスのカスタマイズの基本となります。
.NETでも十分なほど属性クラスが用意されていますが、CustomValidationAttribute属性クラスや、ValidationAttribute属性クラスを使用することで、現場レベルで活用可能な属性クラスも作成可能です。この属性クラスがフィールドテンプレートと密接に絡むことを押さえておきましょう。
まとめ
今回はDynamic Dataをカスタマイズするにあたり、注目するべき基本部分について紹介しました。繰り返しになりますが、DynamicDataのカスタマイズは大別して2種類に分けられます。
- Dynamic Dataの動的ユーザーコントロールなど、プレゼンテーション部分のカスタマイズ(カスタム動的ユーザーコントロールの追加や差し替え、独自のテーブルページの追加など)
- メタデータに対する振る舞い部分など、DataAnnotations名前空間の属性を使用したカスタマイズ(入力値の制限や検証を実施)
この部分さえ押さえれば、Dynamic Dataを実プロジェクトで活用するためのカスタマイズのイメージも掴みやすくなるかもしれません。
次回は既存のWeb Formアプリケーションを簡単にDynamic Data化する方法とアプリケーションの組み込みについて紹介する予定です。お楽しみに。
