0

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エンティティフレームワークバリデーターが使用するデータアノテーション属性についてメソッドに知らせるにはどうすればよいですか?

4

1 に答える 1

1

ここで受け入れられた回答に示されている例を実装してみることができます。基本的には手動でデータ注釈チェックを強制するだけですが、これ以上の方法は見つかりません。

于 2012-04-11T11:54:53.560 に答える