EntityFrameworkでアプリケーションを作成しています。私は次のコードを持っています:
public class Entity : IValidatableObject
{
public int EntityId { get; set; }
[MaxLength(10)]
public string Name { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext = null)
{
if (Name == "John")
yield return new ValidationResult("Not allowed.", new[] { "Name" });
}
public bool IsValid(ValidationContext validationContext = null)
{
return !Validate(validationContext).GetEnumerator().MoveNext();
}
}
エンティティフレームワーククラスは、独自の検証を行うときにこのバリデーターを利用します。
using (var dt = new DatabaseContext()) {
Entity en = new Entity();
en.Name = "John";
dt.Entities.Add(en);
String err = dt.GetValidationErrors().First().ValidationErrors.First().ErrorMessage;
// err == "Not Allowed."
}
ただし、「MaxLength」属性も使用します。
using (var dt = new DatabaseContext()) {
Entity en = new Entity();
en.Name = "01234567890";
dt.Entities.Add(en);
String err = dt.GetValidationErrors().First().ValidationErrors.First().ErrorMessage;
// err == "The field Name must be a string or array type with a maximum length of '10'."
}
私が書いたIsValidメソッドは、MaxLength属性について知りません。
using (var dt = new DatabaseContext()) {
Entity en = new Entity();
en.Name = "John";
en.IsValid; // false
en.Name = "01234567890";
en.IsValid = // true;
}
IsValid
エンティティフレームワークバリデーターが使用するデータアノテーション属性についてメソッドに知らせるにはどうすればよいですか?