0

데이터베이스에서 모델에 대한 데이터 주석을 직접 가져올 수있는 방법이 있습니까? 데이터와 테이블이 많은 데이터베이스가 있으므로 데이터베이스에서 엔티티 프레임 워크로 모델을 생성하므로 클래스를 얻을 수 있지만 엔티티 프레임 워크 또는 다른 일부 orm이 데이터베이스에서 적합성 및 제약 사항을 직접 가져올 수 있는지 알고 싶습니다. [필수] 또는 [데이터 유형 (datatype.emailadress)]과 같은 데이터 표기로 클래스에 포함됩니다.asp.net mvc의 모델 데이터 표기

답변

1

예.

public class LocalizedModelMetadataProvider : DataAnnotationsModelMetadataProvider 
{ 

    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, 
                Func<object> modelAccessor, Type modelType, string propertyName) 
    { 
     var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); 
     if (containerType == null || propertyName == null) 
      return metadata; 

     // Load all metadata from your database here. 

     return metadata; 
    } 

} 

내가 거의 다 당신이 모델과 검증 메시지 모두에 대한 모든 현지화 (제로 코드)를 처리 할 수있는 관리 영역을 가지고 있습니다 Griffin.MvcContrib라는 프로젝트를 만드는거야 : 당신은 ModelMetadataProvider 클래스를 상속 할 수 있습니다. 데이터베이스에 대한 지원을 얻기 위해 당신은 단지 다음과 같은 인터페이스를 구현할 수를 사용하여

:

// the actual code file has detailed explanations of each method. 
public interface ILocalizedStringProvider 
{ 
    string GetModelString(Type model, string propertyName); 
    string GetModelString(Type model, string propertyName, string metadataName); 
    string GetValidationString(Type attributeType); 
    string GetEnumString(Type enumType, string name); 

} 

업데이트

는 어디 중요하지 않습니다. 그리고 모델에 DataAnnotation 특성 ([Display] 특성)을 사용할 필요가 없습니다. 방금 속성을 사용할 수 있도록 DataAnnotationsModelMetadataProvider을 상속합니다.

  1. 어디서나 클래스를 생성하십시오. 데이터베이스
  2. 구성 MVC에서 읽기
  3. 은 Global.asax에 그것을 사용하는

예 : 나는, 내 솔루션에 별도의 프로젝트에 내 모델 클래스를 생성

ModelMetadataProviders.Current = new YourModelMetadataProvider(); 
+0

내 모델 폴더에 너무 mvc 솔루션에서 나는 새로운 클래스를 추가하고 생성 된 클래스에서 코드를 복사하고 나는 수동 데이터 anotations을 추가합니다. modelmetadataProvider 클래스를 상속해야하는 곳을 구체적으로 지정할 수 있습니까? – GoranB

+0

내 업데이트를 읽으십시오. – jgauffin

+0

2 단계) 데이터베이스에서 읽기 및 3) 내가 혼란스러워서 이런 식으로 한 적이 없으므로 ModelMetaDataProvide 클래스를 만들어야합니까? – GoranB