특정 속성이있는 모델이 있습니다. MetadataType과 분리 된 클래스를 사용하여 속성 요구 사항을 정의합니다. 또한 속성의 하위 집합을 정의하는 뷰 모델을 사용하여 동일한 메타 데이터 클래스를 사용하려고합니다. 이 설명에 대한 상황의 간단한 예제 코드입니다 :메타 모델을 viewmodel과 함께 사용할 때 InvalidOperationException이 발생합니다.
[MetadataType(typeof(Metadata))]
class ModelA
{
public class Metadata
{
[Required]
public object Property1 { get; set; }
[Required]
public object Property2 { get; set; }
}
public int Property1 { get; set; }
public int Property2 { get; set; }
}
[MetadataType(typeof(ModelA.Metadata))]
class ViewModelA
{
public int Property1 { get; set; }
}
면도칼 엔진이보기를 처리 할 때 문제는 다음과 같은 오류 메시지와 함께 InvalidOperationException이을 던져입니다 :
'ViewModelA'형식의 연결된 메타 데이터 형식은 다음 알 수없는 속성이나 필드를 포함합니다. 속성 2. 이 멤버의 이름이 기본 유형의 속성 이름과 일치하는지 확인하십시오.
여기 내 문제는 메타 데이터가보기 모델에없는 속성을 포함한다는 것입니다. 그러나이 방법을 사용하면 메타 데이터 클래스가 갖는 이점을 실제로 이해하지 못합니다. 그래서 내 질문은
1)이 예외가 발생하는 것을 방지 할 수있는 방법이 있습니까?
2) 그렇지 않은 경우이 상황에 가장 적합한 패턴은 무엇입니까? (DRY 접근 방식을 유지함으로써 데이터 주석을 정의하면서 모델의 속성 하위 집합을 포함하는 뷰 모델 인 모델 사용).
답장을 보내 주셔서 감사합니다. 따라서 MetadataType은 데이터베이스의 첫 번째 엔티티 프레임 워크와 같이 자동 생성 클래스를 위해 설계되었습니다. 그러나 먼저 코드를 사용하기 때문에 이런 종류의 솔루션은 나에게 쓸모없는 것처럼 보입니다.사실 MVC 튜토리얼 (http://www.microsoftvirtualacademy.com/training-courses/developing-asp-net-mvc-4-web-applications-jump-start)에서이 기술을 보았 기 때문에 약간 혼란 스럽습니다.) 그래서 나는 그들이 왜 그것을 언급했는지 모른다. 아마 비디오를 검토 할 것입니다. – kexx
나는 대체 메타 데이터 클래스를 만들어서 무엇을 의미하는지 알지 못하기 때문에 질문을 열어 둔다. 내 목표는 여기에 데이터 주석과 유효성 검사 자동 매칭을 사용하는 것입니다. 제약 조건 만 정의하는 동안, 나는 여전히 이것을위한 좋은 해결책을 찾고 있습니다. – kexx
@kexx - Property1만으로 대체 메타 데이터 클래스를 정의하십시오. 내가 말했듯이, 자체 데이터 속성을 가진 독립형 뷰 모델을 갖는 것만 큼 많은 작업이 필요합니다. 자습서까지는 데이터베이스를 먼저 사용하거나 모델을 먼저 사용했습니다. –