더북(TheBook)

4. Models 폴더에 Task.cs라는 이름으로 TaskModel 클래스를 생성한다. 이 클래스는 Tasks 테이블과 일대일로 매핑된다. TaskRepository 클래스는 따로 외부에 cs 파일로 구성해도 되는데, 여기서는 Task.cs 파일에 모델 클래스와 리파지터리 클래스를 함께 구성했다. 라파지터리 클래스에서는 Micro ORM인 Dapper로 입출력 코드를 다음과 같이 구성한다. AddTask() 메서드는 일정을 등록하고, GetTasks() 메서드는 모든 일정 목록을 반환하고, CompleteTask() 메서드는 일정을 완료하는 기능을 담고 있다.

▼  ~/Models/Task.cs

using Dapper;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;

namespace DevMvcTaskList.Models
{
  /// <summary>
  /// Tasks(할 일) 테이블과 일대일
  /// </summary>
  public class TaskModel
  {
      public int Id { get; set; }
      public string Title { get; set; }
      public bool IsCompleted { get; set; }
      public DateTime CreationDate { get; set; }
  }
  
  public class TaskRepository
  {
      private IDbConnection db = new SqlConnection(
          ConfigurationManager.ConnectionStrings[
              “ConnectionString”].ConnectionString);
      
      public void AddTask(TaskModel model)
      {
          this.db.Execute(
              @”
                    Insert Into Tasks (Title, IsCompleted) 
                    Values (@Title, Cast(‘false’ As Bit))
, model);
      }
      
      public List<TaskModel> GetTasks()
      {
          return this.db.Query<TaskModel>(
              “Select * From Tasks Order By Id Desc”).ToList();
      }
      
      public void CompleteTask(int id)
      {
          // db.Execute(@“Update Tasks Set IsCompleted = Cast(‘TRUE’ As Bit) 
          // Where Id = @Id”, new { id });
          db.Execute(@“Update Tasks Set IsCompleted = ~IsCompleted 
                Where Id = @Id”, new { id });
      }
  }
}

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