더북(TheBook)

3. MemoEngine 프로젝트의 Models 폴더에 MaximServiceRepository.cs라는 이름으로 클래스를 생성한다. 테이블과 모델 클래스를 바탕으로 데이터를 주고받는 기능을 한곳에 모아 보자. 리파지터리 패턴에 의해서 MaximServiceRepository 클래스를 다음과 같이 구현한다. 데이터베이스 처리 를 다루는 14장에서 사용했던 Micro ORM인 Dapper를 사용한다. 간단히 인라인 SQL 구문으로 데이터 입력, 출력, 수정, 삭제 구문을 만들었다.

▼  /Models/MaximServiceRepository.cs

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

namespace MemoEngine.Models
{
  /// <summary>
  /// 명언(Maxim) 서비스에 대한 DB 연동 코드 부분
  /// </summary>
  public class MaximServiceRepository
  {
      // Database 개체 생성
      private SqlConnection db;
      
      public MaximServiceRepository()
      {
          db = new SqlConnection(ConfigurationManager.ConnectionStrings[
              “ConnectionString”].ConnectionString);
      }
      
      // 입력
      public Maxim AddMaxim(Maxim model)
      {
          string sql = @”
                Insert Into Maxims (Name, Content) Values (@Name, @Content);
                Select Cast(SCOPE_IDENTITY() As Int);
;
          var id = this.db.Query<int>(sql, model).Single();
          model.Id = id;
          return model;
      }
      
      // 출력
      public List<Maxim> GetMaxims()
      {
          string sql = @“Select Id, Name, Content, CreationDate 
                From Maxims Order By Id Asc”;
          return this.db.Query<Maxim>(sql).ToList();
      }
      
      // 상세
      public Maxim GetMaximById(int id)
      {
          string sql = @“Select Id, name, Content, CreationDate 
                From Maxims Where Id = @Id”;
          return this.db.Query<Maxim>(sql, new { Id = id }).SingleOrDefault();
      }
      
      // 수정
      public Maxim UpdateMaxim(Maxim model)
      {
          string sql = @“Update Maxims 
                Set Name = @Name, Content = @Content Where Id = @Id”;
          this.db.Execute(sql, model);
          return model;
      }
      
      // 삭제
      public void RemoveMaxim(int id)
      {
          string sql = “Delete Maxims Where Id = @Id”;
          this.db.Execute(sql, new { id });
      }
  }
}

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