C #에서 데이터 주석을 사용하는 방법

데이터 주석 (System. ComponentModel. DataAnnotations 네임 스페이스의 일부로 사용 가능)은 클래스 또는 클래스 멤버에 적용하여 클래스 간의 관계를 지정하고, 데이터가 UI에 표시되는 방법을 설명하고, 유효성 검사 규칙을 지정할 수있는 속성입니다. 이 문서에서는 데이터 주석, 유용한 이유, .NET Core 애플리케이션에서 사용하는 방법에 대해 설명합니다.

이 문서에 제공된 코드 예제를 사용하려면 시스템에 Visual Studio 2019가 설치되어 있어야합니다. 아직 복사본이없는 경우 여기에서 Visual Studio 2019를 다운로드 할 수 있습니다. 

Visual Studio 2019에서 콘솔 애플리케이션 프로젝트 만들기

먼저 Visual Studio에서 .NET Core 콘솔 애플리케이션 프로젝트를 만들어 보겠습니다. Visual Studio 2019가 시스템에 설치되어 있다고 가정하고 아래에 설명 된 단계에 따라 Visual Studio에서 새 .NET Core 콘솔 애플리케이션 프로젝트를 만듭니다.

  1. Visual Studio IDE를 시작합니다.
  2. "새 프로젝트 만들기"를 클릭합니다.
  3. "새 프로젝트 만들기"창의 표시된 템플릿 목록에서 "콘솔 앱 (.NET Core)"을 선택합니다.
  4. 다음을 클릭하십시오. 
  5. 다음에 표시된 "새 프로젝트 구성"창에서 새 프로젝트의 이름과 위치를 지정합니다.
  6. 생성을 클릭합니다.

그러면 Visual Studio 2019에서 새로운 .NET Core 콘솔 애플리케이션 프로젝트가 생성됩니다.이 프로젝트를 사용하여이 문서의 후속 섹션에서 데이터 주석 작업을 수행합니다.

시스템을 포함합니다. ComponentModel. DataAnnotations 네임 스페이스

이 기사에 제공된 코드 샘플로 작업하려면 시스템을 포함해야합니다. ComponentModel. 프로그램의 DataAnnotations 네임 스페이스.

속성은 클래스 또는 속성에 대한 메타 데이터를 지정하는 데 사용됩니다. 데이터 주석 속성은 크게 다음과 같이 분류 할 수 있습니다.

  • 유효성 검사 속성 — 엔터티 속성에 대한 유효성 검사 규칙을 적용하는 데 사용됩니다.
  • 표시 속성 — 데이터가 사용자 인터페이스에 표시되는 방법을 지정하는 데 사용됩니다.
  • 모델링 속성 — 클래스간에 존재하는 관계를 지정하는 데 사용됩니다.

C #의 데이터 주석 특성 클래스

System.ComponentModel.Annotations 네임 스페이스는 엔터티 클래스 또는 데이터 컨트롤에 대한 메타 데이터를 정의하는 데 사용할 수있는 여러 특성 클래스로 구성됩니다. 가장 일반적으로 사용되는 속성은 다음과 같습니다.

  • 동시성 검사
  • MaxLength
  • 필수
  • StringLength
  • 타임 스탬프

C #의 데이터 주석 예제

앞에서 만든 콘솔 응용 프로그램의 Author.cs 파일에 다음 클래스를 만듭니다.

공개 클래스 작성자

    {

        [Required (ErrorMessage = "{0} is required")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "이름은 최소 3 자, 최대 50 자 여야합니다.")]

        [DataType (DataType.Text)]

        public string FirstName {get; 세트; }

        [Required (ErrorMessage = "{0} is required")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "성은 최소 3 자, 최대 50 자 여야합니다.")]

        [DataType (DataType.Text)]

        public string LastName {get; 세트; }

        [DataType (DataType.PhoneNumber)]

        [전화]

        public string PhoneNumber {get; 세트; }

        [DataType (DataType.EmailAddress)]

        [이메일 주소]

        공개 문자열 이메일 {get; 세트; }

    }

다음 코드 조각은 Author 클래스의 인스턴스를 만들고 해당 속성에 값을 할당하는 방법을 보여줍니다.

저자 author = new Author ();

author.FirstName = "조이 디프";

author.LastName = "";

author.PhoneNumber = "1234567890";

author.Email = "[email protected]";

Program.cs 파일의 Main 메서드에 다음 코드 조각을 작성하여 모델의 유효성을 검사 할 수 있습니다.

ValidationContext 컨텍스트 = new ValidationContext (author, null, null);

목록 validationResults = new List ();

bool valid = Validator.TryValidateObject (작성자, 컨텍스트, validationResults, true);

if (! valid)

{

  foreach (validationResults의 ValidationResult validationResult)

  {

       Console.WriteLine ( "{0}", validationResult.ErrorMessage);

  }

}

ValidationContext는 유효성 검사를 수행해야하는 컨텍스트를 제공하는 클래스입니다. Validator 클래스의 TryValidateObject 정적 메서드는 유효성 검사에 성공하면 true를 반환하고 그렇지 않으면 false를 반환합니다. 또한 모델에서 실패한 모든 유효성 검사를 자세히 설명하는 ValidationResults 목록을 반환합니다. 마지막으로 foreach 루프를 사용하여 ValidationResults 목록을 반복하고 콘솔 창에 오류 메시지를 표시했습니다.

전체 코드 목록은 아래에 참조 용으로 제공됩니다.

공개 클래스 작성자

    {

        [Required (ErrorMessage = "{0} is required")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "이름은 최소 3 자, 최대 50 자 여야합니다.")]

        [DataType (DataType.Text)]

        public string FirstName {get; 세트; }

        [Required (ErrorMessage = "{0} is required")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "성은 최소 3 자, 최대 50 자 여야합니다.")]

        [DataType (DataType.Text)]

        public string LastName {get; 세트; }

        [DataType (DataType.PhoneNumber)]

        [전화]

        public string PhoneNumber {get; 세트; }

        [DataType (DataType.EmailAddress)]

        [이메일 주소]

        공개 문자열 이메일 {get; 세트; }

    }

    수업 프로그램

    {      

        static void Main (string [] args)

        {

            저자 author = new Author ();

            author.FirstName = "조이 디프";

            author.LastName = ""; // 입력 된 값이 없습니다.

            author.PhoneNumber = "1234567890";

            author.Email = "[email protected]";

            ValidationContext 컨텍스트 = 새 ValidationContext

            (저자, null, null);

            목록 validationResults = new

            명부();

            bool valid = Validator.TryValidateObject

            (저자, 컨텍스트, validationResults, true);

            if (! valid)

            {

                foreach (ValidationResult validationResult in

                validationResults)

                {

                    Console.WriteLine ( "{0}",

                    validationResult.ErrorMessage);

                }

            }

            Console.ReadKey ();

        }

    }

프로그램을 실행하면 콘솔 창에 다음과 같은 오류 메시지가 표시됩니다.

성은 필수입니다

C #에서 사용자 지정 유효성 검사 특성 만들기

사용자 지정 유효성 검사 특성 클래스를 만들려면 ValidationAttribute 기본 클래스를 확장하고 아래 제공된 코드 조각에 표시된대로 IsValid 메서드를 재정의해야합니다.

[AttributeUsage (AttributeTargets.Property, AllowMultiple = false, Inherited = false)]

공용 클래스 IsEmptyAttribute : ValidationAttribute

 {

    공개 재정의 bool IsValid (객체 값)

     {

         var inputValue = 값을 문자열로;

         return! string.IsNullOrEmpty (inputValue);

     }

 }

다음 코드 조각은 사용자 지정 특성을 사용하여 Author 클래스의 FirstName 및 LastName 속성을 장식하는 방법을 보여줍니다.

[IsEmpty (ErrorMessage = "null이거나 비어 있으면 안됩니다.")]

public string FirstName {get; 세트; }

[IsEmpty (ErrorMessage = "null이거나 비어 있으면 안됩니다.")]

public string LastName {get; 세트; }

데이터 주석은 처음에 시스템의 일부로 .NET 3.5에서 도입되었습니다. ComponentModel. DataAnnotations 네임 스페이스. 그 이후로 .NET에서 널리 사용되는 기능이되었습니다. 데이터 주석을 활용하여 한 곳에서 데이터 유효성 검사 규칙을 정의하면 동일한 유효성 검사 코드를 반복해서 다시 작성하지 않아도됩니다.

향후 게시물에서는 ASP.NET Core MVC 애플리케이션에서 데이터 주석을 사용하여 모델 유효성 검사를 수행하는 방법을 살펴볼 것입니다.

C #에서 더 많은 작업을 수행하는 방법

  • C #에서 추상 클래스와 인터페이스를 사용하는 경우
  • C #에서 AutoMapper를 사용하는 방법
  • C #에서 람다 식을 사용하는 방법
  • C #에서 Action, Func 및 Predicate 대리자를 사용하는 방법
  • C #에서 대리자를 사용하는 방법
  • C #에서 간단한 로거를 구현하는 방법
  • C #에서 특성을 사용하는 방법
  • C #에서 log4net으로 작업하는 방법
  • C #에서 리포지토리 디자인 패턴을 구현하는 방법
  • C #에서 리플렉션을 사용하는 방법
  • C #에서 filesystemwatcher로 작업하는 방법
  • C #에서 지연 초기화를 수행하는 방법
  • C #에서 MSMQ를 사용하는 방법
  • C #에서 확장 메서드를 사용하는 방법
  • C #에서 람다 식 사용 방법
  • C #에서 volatile 키워드를 사용하는 경우
  • C #에서 yield 키워드를 사용하는 방법
  • C #에서 다형성을 구현하는 방법
  • C #에서 자신 만의 작업 스케줄러를 빌드하는 방법
  • C #에서 RabbitMQ로 작업하는 방법
  • C #에서 튜플을 사용하는 방법
  • C #에서 가상 및 추상 메서드 탐색