방법: 데이터 유효성 검사
이 항목에서는 속성과 엔터티에 유효성 검사 특성을 추가하여 유효성 검사 규칙을 적용하는 방법에 대해 설명합니다. WCF RIA Services에서는 일반적인 유효성 검사를 수행하는 여러 가지 유효성 검사 특성을 제공하며, 사용자 지정된 유효성 검사를 지정할 수 있도록 CustomValidationAttribute 특성도 제공합니다.
RIA Services 에서 제공하는 기본 유효성 검사 특성은 다음과 같습니다.
서버 프로젝트의 엔터티에 유효성 검사 특성을 추가하면 생성된 클라이언트 엔터티 표현에 해당 유효성 검사 특성이 전파됩니다. 런타임 시 사용자의 데이터에 유효성 검사 규칙이 적용됩니다. 유효성 검사 특성을 추가하려면 메타데이터 클래스를 추가해야 합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 방법: 메타데이터 클래스 추가를 참조하십시오.
이 항목에서는 기본 및 사용자 지정 유효성 검사 특성을 추가하는 방법에 대해 설명합니다.
RIA 서비스에서 제공하는 유효성 검사 특성을 추가하려면
방법: 메타데이터 클래스 추가에 설명된 대로 엔터티 클래스의 메타데이터 클래스를 추가합니다.
유효성을 검사할 속성 또는 엔터티에서 유효성 검사를 수행하는 유효성 검사 특성을 추가합니다.
다음 예제에서는
AddressLine1
이라는 속성에 적용된 RequiredAttribute 및 StringLengthAttribute 특성을 보여 줍니다.<Required()> _ <StringLength(60)> _ <RoundtripOriginal()> _ Public AddressLine1 As String
[Required] [StringLength(60)] [RoundtripOriginal] public string AddressLine1 { get; set; }
Ctrl+Shift+B를 눌러 솔루션을 빌드합니다.
Silverlight응용 프로그램에서 Generated_Code 폴더에 생성된 코드 파일을 열고 클라이언트 코드에서 유효성 검사 특성이 어떻게 적용되었는지 확인합니다.
사용자 지정 유효성 검사 특성을 추가하려면
방법: 메타데이터 클래스 추가에 설명된 대로 엔터티 클래스의 메타데이터 클래스를 추가합니다.
*.shared.cs
또는*.shared.vb
명명 패턴을 사용하여 공유 코드 파일을 추가합니다.코드 파일에 사용자 지정 유효성 검사 개체가 포함됩니다.
데이터가 유효한지 여부를 결정하는 메서드를 추가합니다.
메서드는 public이고 static(또는 Visual Basic의 경우 Public이고 Shared)이어야 하며, ValidationResult를 반환하여 유효성 검사의 결과를 나타내야 합니다. 사용자 지정 유효성 검사 클래스를 정의할 때 클라이언트 프로젝트에서 클래스가 올바르게 생성되려면 최소한 자동 구현된 속성 이외의 다른 몇 가지 코드를 제공해야 합니다.
다음 예제에서는 Product 엔터티의 유효성을 검사하는
IsProductValid
메서드와 함께ProductValidator
클래스를 보여 줍니다. 데이터가 유효하지 않으면 오류 메시지와 유효성 검사에 실패한 속성의 이름을 반환합니다.Imports System.ComponentModel.DataAnnotations Public Class ProductValidator Public Shared Function IsProductValid(ByVal productToValidate As Product, ByVal context As ValidationContext) If (productToValidate.ListPrice < (CDec(0.8) * productToValidate.StandardCost)) Then Return New ValidationResult("ListPrice is below 80 percent of StandardCost.", New String() {"ListPrice"}) Else Return ValidationResult.Success End If End Function End Class
using System; using System.ComponentModel.DataAnnotations; namespace RIAServicesExample.Web { public class ProductValidator { public static ValidationResult IsProductValid(Product productToValidate, ValidationContext context) { if (productToValidate.ListPrice < ((decimal).8 * productToValidate.StandardCost)) { return new ValidationResult("ListPrice is below 80 percent of StandardCost.", new string[] { "ListPrice" }); } else { return ValidationResult.Success; } } } }
유효성을 검사할 엔터티나 속성에서 CustomValidationAttribute 특성을 추가하고 유효성 검사 개체의 형식과 유효성 검사를 수행하는 메서드의 이름을 전달합니다.
다음 예제에서는 엔터티에 적용된 CustomValidationAttribute 특성을 보여 줍니다. 유효성 검사 개체 형식은
ProductValidator
이고 메서드는IsProductValid
입니다.<CustomValidation(GetType(ProductValidator), "IsProductValid")> _ <MetadataTypeAttribute(GetType(Product.ProductMetadata))> _ Partial Public Class Product Friend NotInheritable Class ProductMetadata 'Metadata classes are not meant to be instantiated. Private Sub New() MyBase.New() End Sub Public Color As String Public DiscontinuedDate As Nullable(Of DateTime) Public ListPrice As Decimal Public ModifiedDate As DateTime Public Name As String Public ProductCategoryID As Nullable(Of Integer) Public ProductID As Integer Public ProductModelID As Nullable(Of Integer) Public ProductNumber As String Public rowguid As Guid Public SellEndDate As Nullable(Of DateTime) Public SellStartDate As DateTime <Required()> _ <StringLength(20)> _ Public Size As String Public StandardCost As Decimal Public ThumbNailPhoto() As Byte Public ThumbnailPhotoFileName As String Public Weight As Nullable(Of Decimal) End Class End Class
[CustomValidation(typeof(ProductValidator), "IsProductValid")] [MetadataTypeAttribute(typeof(Product.ProductMetadata))] public partial class Product { internal sealed class ProductMetadata { // Metadata classes are not meant to be instantiated. private ProductMetadata() { } public string Color; public Nullable<DateTime> DiscontinuedDate; public decimal ListPrice; public DateTime ModifiedDate; public string Name; public Nullable<int> ProductCategoryID; public int ProductID; public Nullable<int> ProductModelID; public string ProductNumber; public Guid rowguid; public Nullable<DateTime> SellEndDate; public DateTime SellStartDate; [Required()] [StringLength(20)] public string Size; public decimal StandardCost; public byte[] ThumbNailPhoto; public string ThumbnailPhotoFileName; public Nullable<decimal> Weight; } }
Ctrl+Shift+B를 눌러 솔루션을 빌드합니다.
Silverlight 응용 프로그램에서 Generated_Code 폴더를 엽니다. 공유 코드 파일이 폴더에 있고 엔터티에 CustomValidationAttribute가 어떻게 적용되는지 확인합니다.