ASP.NET MVCのモデルでよく使う属性（アノテーション）リスト

#属性一覧

|属性名（アノテーション）     | 説明 |
|:--------------------------|:--|
|Key                        | 主キー制約（プライマリーキー）|
|ForeignKey                 | 外部キー |
|DisplayName                | Html.LabelFor などのヘルパー利用時に自動代入 |
|Required                   | Not Null制約 |
|StringLength(val)          | 最大文字制約 |
|MaxLength(val)             | 最大文字制約 |
|MinLength(val)             | 最小文字制約 |
|Range(val, val)            | 数値範囲検証（min, max）|
|EmailAddress               | メールアドレス検証 |
|Phone                      | 電話番号検証 |
|Url                        | URL検証 |
|FileExtensions             | ファイル拡張子検証 |
|Compare(other)             | 比較検証（プロパティとotherの等しいか）|
|TimeStamp                  | タイプスタンプ（同時アクセス時の競合対策）|
|RegularExpression(pattern) | 指定した正規表現検証 |
|Index                      | インデックス（DB読み込み高速化、しかし書き込みは遅くなる）|
|NotMapped                  | データベースにマップしない |
|Table                      | マッピングするテーブルの名前指定|
|Column                     | 列の属性 |
|ComplexType                | 複合型を定義 |



#Key
主キーなので、主にIdなどにつける（ユーザーモデルのIDならUserIdとか）

```lang
[Key]
public int Id { get; set; }
```

#ForeignKey
外部キー

```lang
coming soon
```

#DisplayName
@Html.DisplayNameなどで表示するラベルを付ける

```lang
[DisplayName("ユーザー名")]    
public string Name { get; set; }
```

#Required
入力を必須にする。フォームが空のまま送信されると弾かれます。

```lang    
[Required(ErrorMessage = "名前は必須入力です")]    
public string Name { get; set; }
```

#StringLength(val)
入力最大文字を設定します。

```lang
[StringLength(20, ErrorMessage = "自己紹介は１００文字以内でお願いします")]    
public string Memo { get; set; }
```

#MaxLength(val)
入力最大文字を設定します。

```lang
[MaxLength(20, ErrorMessage = "名前は２０文字以内でお願いします")]    
public string Name { get; set; }
```

#MinLength(val) 
入力最少文字を設定します。

```lang
[MinLength(4, ErrorMessage = "名前は４文字以上でお願いします")]    
public string Name { get; set; }
```

#Range(val, val)
入力数字の幅を設定します。

```lang
[Range(20, 100, ErrorMessage = "年齢は２０～１００歳の幅でお願いします")]    
public int age { get; set; }
```

#EmailAddress
入力文字がメールアドレスの形式か判定する

```lang
[EmailAddress(ErrorMessage = "メールアドレスの形式で入力してください")]
public string Email { get; set; }
```

#Phone
入力文字が電話番号の形式か判定する

```lang
[Phone(ErrorMessage = "電話番号の形式で入力してください")]
public string PhoneNumber { get; set; }
```

#Url
入力文字がUrlの形式か判定する

```lang
[Url(ErrorMessage = "Urlの形式で入力してください")]
public string url { get; set; }
```

#FileExtensions
入力文字がUrlの形式か判定する

```lang
[FileExtensions(ErrorMessage = "こちらのファイル拡張子は利用できません")]
public string FileName { get; set; }
```

#Compare(other)
```lang
coming soon
```

#TimeStamp
```lang
coming soon
```

#RegularExpression(pattern)
正規表現で指定した文字にて、制限をかける

```lang
// 半角英字のみ
[RegularExpression(@"[a-zA-Z]+", ErrorMessage = "半角英字のみ入力できます")]
public string AccountName { get; set; }

// 半角数字
[RegularExpression(@"[0-9]+", ErrorMessage = "半角数字のみ入力できます")]
public string AccountName { get; set; }

// 半角記号
[RegularExpression(@"[ -/:-@\[-\`\{-\~]+", ErrorMessage = "半角記号のみ入力できます")]
public string AccountName { get; set; }

// 半角英数字
[RegularExpression(@"[a-zA-Z0-9]+", ErrorMessage = "半角英数字のみ入力できます")]
public string AccountName { get; set; }

// 半角英数字記号
[RegularExpression(@"[a-zA-Z0-9 -/:-@\[-\`\{-\~]+", ErrorMessage = "半角英数字記号のみ入力できます")]
public string AccountName { get; set; }

// 半角カタカナ
[RegularExpression(@"[｡-ﾟ+]+", ErrorMessage = "半角カタカナのみ入力できます")]
public string AccountName { get; set; }

// 全角カタカナ
[RegularExpression(@"[ァ-ヶ]+", ErrorMessage = "全角カタカナのみ入力できます")]
public string AccountName { get; set; }

// 郵便番号
[RegularExpression(@"\d{3}-\d{4}", ErrorMessage = "郵便番号の形式で入力してください")]
public string AccountName { get; set; }

```

#Index
```lang
[Index]    
public string Name { get; set; }
```

#NotMapped
```lang
coming soon
```

#Table
```lang
coming soon
```

#Column
```lang
coming soon
```
#ComplexType
```lang
coming soon
```

# 参考
http://blog.shibayan.jp/entry/20110708/1310132392