2011-01-10 5 views
2

나는 프로 asp.net mvc 2.0 프레임 워크를 통해 갈 것이고 그는 또한 SQL에 linq을 생성하는 클래스에 자신의 데이터 어노테이션 태그를 넣는 것처럼 보인다.데이터 주석 태그는 어디에 둘까요?

[Table(Name = "Products")] 
    public class Product 
    { 
     [HiddenInput(DisplayValue = false)] 
     [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] 
     public int ProductID { get; set; } 

     [Required(ErrorMessage = "Please enter a product name")] 
     [Column] public string Name { get; set; } 

     [Required(ErrorMessage = "Please enter a description")] 
     [DataType(DataType.MultilineText)] 
     [Column] public string Description { get; set; } 

     [Required] 
     [Range(0.01, double.MaxValue, ErrorMessage = "Please enter a positive price")] 
     [Column] public decimal Price { get; set; } 

     [Required(ErrorMessage = "Please specify a category")] 
     [Column] public string Category { get; set; } 

     [Column] 
     public byte[] ImageData { get; set; } 

     [ScaffoldColumn(false)] [Column] 
     public string ImageMimeType { get; set; } 

그러나 데이터베이스를 개발하지 않으면 어떻게되는지 궁금합니다. 만약 내 솔루션에 linqtosql.dbml (linq to sql 클래스) 파일을 추가하면 멋진 디자이너를 얻을 수있다.

어디에서이 모든 데이터 주석을 넣을 수 있습니까? 나는이 모든 내용을 가지고있는 다른 클래스를 만들 수 있습니까? 아니면 뷰 모델에 있습니까?

답변

4

MetadataType 속성을 사용해 보셨습니까?

public class IProductMetadata 
{   
    [HiddenInput(DisplayValue = false)] 
    int ProductID; 

    [Required(ErrorMessage = "Please enter a product name")]   
    string Name; 

    [Required(ErrorMessage = "Please enter a description")]   
    string Description; 
    // etc 
} 

[MetadataType(typeof(IProductMetadata))] 
public partial class Product 
{ 
} 

이 코드는 부분 클래스를 통해 생성 된 코드의 속성에 속성을 첨부하는 데 사용됩니다. 정말 잘 작동합니다!

+1

그래서 기본적으로 생성 된 각 테이블에 대해 부분 클래스를 만든 다음이 부분 클래스에서 유효성 검사 데이터를 넣고 있습니까? – chobo2

+0

모든 속성에 대한 유효성 검사 특성을 정의하는 인터페이스를 만든 다음 MetadataType 특성을 가진 부분 클래스를 만듭니다. 부분 클래스에 MetadataType 특성을 지정하면 속성 특성이 해당 클래스의 해당 속성에 적용됩니다. http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx 또는 http://goneale.com/2009/03/04/using를 확인하십시오. 예를 들어, -metadatatype-attribute-with-aspnet-mvc-xval-validation-framework /를 사용하십시오. –

0

뷰 모델에서 수행하고 AutoMapper를 사용하여 데이터 개체와 뷰 모델간에 매핑합니다.

+0

분명히 이것은 당신의 선택입니다. 하지만 내 생각에 당신은 당신의 모델이 이식 가능하지 않다는 것을 의미하는 어플리케이션 계층에서 비즈니스 규칙을 검증하고있다. 다른 프런트 엔드를 원한다면 어떻게 될까요? – nick

+0

어디에서 닉을 넣을까요? – chobo2

+0

비즈니스 개체에서 ValidationAttributes에 대한 대/소문자를 만들 수는 있지만 DisplayAttributes에 대한 중요한 것은 아닙니다. 또한 디자이너가 클래스를 생성하는 데 디자이너를 사용하는 경우 템플릿에 클래스가 재생성 될 때마다 손실 될 수 있으므로 DataAnnotations를 추가하지 않으려합니다. –

관련 문제