더북(TheBook)

5. Models 폴더의 DotNetNote 폴더에 Note.cs 파일을 생성한다. 다음 코드는 Note.cs 파일로 Notes 테이블과 일대일로 매핑되는 Note 모델 클래스다. 단순히 C#의 클래스와 속성으로 구성된 클래스인데 이곳에 System.ComponentModel.DataAnnotations 네임스페이스의 주요 특성을 사용해 모델 메타데이터를 부여하는 코드가 추가되었다. [Display] 특성으로 동적으로 생성되는 레이블의 텍스트를 줄 수 있고, [Required] 특성으로 반드시 입력 받아야 함을 지정하고, [EmailAddress] 특성으로 이메일 형태의 데이터만 입력 받을 수 있는 유효성 검사를 적용할 수 있다. 모델 클래스 또는 뷰 모델 클래스를 생성할 때는 꼭 테이블과 일대일일 필요는 없지만, 대부분 일대일 관계를 유지하고 SQL의 뷰(View) 또는 저장 프로시저의 결과 레코드를 담을 그릇도 모델 클래스에 담아서 사용하려면 해당 반환되는 레코드의 형태대로 따로 만들어서 관리해도 된다(참고로 나는 테이블과 일대일은 모델 클래스로 명명하고, 레코드의 결과를 담는 그릇은 뷰 모델로 명명한다).

▼  /Models/DotNetNote/Note.cs

using System;
using System.ComponentModel.DataAnnotations;

namespace DotNetNote.Models
{
  /// <summary>
  /// Note 클래스: Notes 테이블과 일대일 매핑되는 ViewModel 클래스
  /// </summary>
  public class Note
  {
        [Display(Name=“번호”)]
      public int Id { get; set; }
        [Display(Name=“작성자”)]
        [Required(ErrorMessage = “* 이름을 작성해 주세요.“)]
      public string Name { get; set; }
        [EmailAddress(ErrorMessage = “이메일을 정확인 입력하세요.”)]
      public string Email { get; set; }
        [Display(Name=“제목”)]
        [Required(ErrorMessage = “* 제목을 작성해 주세요.“)]
      public string Title { get; set; }
        [Display(Name=“작성일”)]
      public DateTime PostDate { get; set; }
      public string PostIp { get; set; }
        [Display(Name=“내용”)]
        [Required(ErrorMessage = “* 내용을 작성해 주세요.“)]
      public string Content { get; set; }
        [Display(Name=“비밀번호”)]
        [Required(ErrorMessage = “* 비밀번호를 작성해 주세요.“)]
      public string Password { get; set; }
        [Display(Name=“조회수”)]
      public int ReadCount { get; set; }
        [Display(Name = “인코딩”)]
      public string Encoding { get; set; } = “Text”;
      public string Homepage { get; set; }
      public DateTime ModifyDate { get; set; }
      public string ModifyIp { get; set; }
        [Display(Name=“파일”)]
      public string FileName { get; set; }
      public int FileSize { get; set; }
      public int DownCount { get; set; }
      public int Ref { get; set; }
      public int Step { get; set; }
      public int RefOrder { get; set; }
      public int AnswerNum { get; set; }
      public int ParentNum { get; set; }
      public int CommentCount { get; set; }
      public string Category { get; set; } = “Free”; // 자유게시판(Free) 기본
  }
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.