첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
다운로드

▶ EmployeeModel.cs

namespace TestProject
{
    /// <summary>
    /// 직원 모델
    /// </summary>
    public class EmployeeModel
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region ID - ID

        /// <summary>
        /// ID
        /// </summary>
        public string ID { get; set; }

        #endregion
        #region 성명 - Name

        /// <summary>
        /// 성명
        /// </summary>
        public string Name { get; set; }

        #endregion
    }
}

 

728x90

 

▶ Program.cs

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Linq;

using Oracle.ManagedDataAccess.Client;

using Dapper;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 직원 매핑 딕셔너리
        /// </summary>
        private static Dictionary<string, string> _employeeMappingDictionary = new Dictionary<string, string>
        {
            { "EMPNO", "ID"   },
            { "ENAME", "Name" }
        };

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 프로그램 시작하기 - Main()

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            CustomPropertyTypeMap employeeMap = new CustomPropertyTypeMap
            (
                typeof(EmployeeModel),
                (type, columnName) => SelectEmployeeProperty(type, columnName)
            );

            SqlMapper.SetTypeMap(typeof(EmployeeModel), employeeMap);

            string connectionString = @"Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS =
(PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = orcl)));User ID=SYSTEM;Password=P@ssw0rd";

            string sql = @"
SELECT
    EMPNO
   ,ENAME
FROM SCOTT.EMP
";

            using(OracleConnection connection = new OracleConnection(connectionString))
            {
                var resultList = connection.Query<EmployeeModel>(sql).ToList();

                foreach(var item in resultList)
                {
                    Console.WriteLine($"{item.ID} {item.Name}");
                }
            }
        }

        #endregion

        #region 직원 속성 선택하기 - SelectEmployeeProperty(type, columnName)

        /// <summary>
        /// 직원 속성 선택하기
        /// </summary>
        /// <param name="type">타입</param>
        /// <param name="columnName">컬럼명</param>
        /// <returns>속성 정보</returns>
        private static PropertyInfo SelectEmployeeProperty(Type type, string columnName)
        {
            if(_employeeMappingDictionary.ContainsKey(columnName))
            {
                return type.GetProperty(_employeeMappingDictionary[columnName]);
            }
            else
            {
                return type.GetProperty(columnName);
            }
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요