2013-01-22 2 views
0

DataAnnotations를 사용하여 클래스의 수동 유효성 검사를 수행하려고합니다. 응용 프로그램은 콘솔 응용 프로그램이므로 MVC는 관련되지 않습니다. NET 4.0을 사용하고 있습니다.DataAnnotations 기반 수동 유효성 검사가 작동하지 않는 이유는 무엇입니까?

나는 this article에서 내 지침을 얻었습니다. 유일한 차이점은 메타 데이터 클래스를 사용하려고한다는 것입니다. 하지만 제가 읽은 다른 것들은 이것이 할 수 있다고 제안합니다.

그러나 런타임에 개체는 유효성 검사를 통과합니다. 나는 MVC3에서 DataAnnotations를 사용했고, 나는 그들과 꽤 잘했다고 생각했지만, 나는 당황 스럽다.

무엇이 누락 되었습니까? System.ComponentModel.DataAnnotations 이외의 어셈블리가 필요합니까?

/// This is a partial-class addition to an Entity Framework class, so the properties are 
/// defined in the EF .designer.cs file. 
[MetadataType(typeof(EntityMetadata.tblThingMetaData))] 
public partial class tblThing 
{ 

} 

메타 데이터 클래스 :

public partial class tblThingMetaData 
{ 
    [Required(AllowEmptyStrings = false, ErrorMessage = "Sequence number is required")] 
    [RegularExpression("A")] 
    public string seq_num { get; set; } 
} 

테스트 : 나는 다른 변화를 시도했습니다

[TestMethod] 
    public void VerifyValidationWorksOnEntities() 
    { 
     tblThing newThing = new tblThing() 
     { 
      seq_num = "B" 
     }; 

     List<ValidationResult> results = new List<ValidationResult>(); 
     bool validationResult = Validator.TryValidateObject(
      newThing, 
      new ValidationContext(newThing, null, null), 
      results, 
      true); 

     Assert.AreNotEqual(0, results.Count); 
     Assert.IsFalse(validationResult); 
    } 

: newThing.seq_num 그것은 항상 통과 등 만 seq_num 속성을 확인하는, 널 (null) 인 유효성 검사 결과가 없습니다. 검사는 항상 실패합니다.

나에게 줄 수있는 조언을 주신 것에 대해 많은 감사드립니다.

답변

1

대답은 here입니다. 분명히, 이것은 당신이 확인하기 전에 다음을 추가하지 않는 한 실버 또는 MVC의 외부에서 작동하지 않습니다 마지막 매개 변수가 typeof(tblThing)하지 newThing 할 필요가

TypeDescriptor.AddProviderTransparent(
    new AssociatedMetadataTypeTypeDescriptionProvider(
     typeof(tblThing), 
     typeof(EntityMetadata.tblThingMetaData) 
    ), typeof(tblThing)); 

하는 것으로. 메타 데이터와 연결하는 유형의 단일 인스턴스를 사용하는 오버로드가 있어도 유효성을 검사하려는 인스턴스와 동일한 경우에도 유형이 아닌 인스턴스를 제공하면 작동하지 않습니다.

끔찍하지만 적어도 지금은 작동합니다.

관련 문제