ORM 프레임워크 직접 쓰기 (1): 목표 효과 미리 보기

10093 단어 플랫폼의-.Net

ORM 프레임워크 직접 쓰기 (1): 목표 효과 미리 보기


쓸데없는 말 없이 ORM을 사용하면 좋은 점이 많다. (1) 코드를 간소화하고 (2) 코드의 오류를 줄이며 (3) 모델과DAL,BLL층을 대량으로 생성하여 민첩하고 신속하게 개발한다.온라인에서는 ORM의 효율성 문제가 언급되지만, 이 문제는 뒤에 더 자세히 설명하고 해결 방법을 설명한다.최종적으로 이루어진 효과는 소량의 코드만 쓰면 CURD 조작을 실현할 수 있다.

1. 솔리드 클래스와 데이터베이스 테이블의 매핑 관계 구성:


1.1 StudentEntity 코드

using System;

using System.Data;

using System.Collections.Generic;

using System.Text;

using System.Orm.CustomAttributes;



namespace Entity

{

    [Serializable]

    [Table(name="Student")]

    public class StudentEntity

    {

        private string stuid;
        private string stuno;
        private string name;
        private int sex;
        private int age;
        private string address;
        private string telphone;

        [Id(Name=”stuid”,Strategy = GenerationType.SEQUENCE)]
        public string Stuid
        {
            get { return stuid; }
            set { stuid = value; }
        }

        [Column(Name = "studentno")]
        public string Stuno
        {
            get { return stuno; }
            set { stuno = value; }
        }

        [Column(IsInsert = true)]
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        [Column(IsUpdate = true)]
        public int Sex
        {
            get { return sex; }
            set { sex = value; }
        }

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        public string Address
        {
            get { return address; }
            set { address = value; }
        }

        public string Telphone
        {
            get { return telphone; }
            set { telphone = value; }
        }
    }
}

2. DAL 레이어 코드


2.1 StudentDAL 코드

public class StudentDAL
    {
        EntityManager entityManager = EntityManagerFactory.CreateEntityManager();
        public StudentDAL() { }
        public StudentDAL(IDbTransaction transaction)
        {
            entityManager.Transaction = transaction;
        }

        public List FindAll()
        {
            return entityManager.FindAll();
        }

        public int Save(StudentEntity entity)
        {
            return entityManager.Save(entity);
        }

        public int Update(StudentEntity entity)
        {
            return entityManager.Update(entity);
        }

        public int Remove(StudentEntity entity)
        {
            return entityManager.Remove(entity);
        }

        public int Remove(object id)
        {
            return entityManager.Remove(id);
        }               

        public  List FindById(object id)
        {
            return entityManager.FindById(id);
        }

        public  List FindByProperty(string propertyName,object value)
        {
            return entityManager.FindByProperty(propertyName, value);
        }
    }

3. BLL 레이어 코드:


3.1 StudentBLL 코드

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using DAL;
using Entity;
using System.Orm.DBTransaction;

namespace BLL
{
    public class StudentBP
    {
        public List FindAll()
        {
            StudentDAL dal = new StudentDAL();
            return dal.FindAll();
        }

        public void Save(StudentEntity entity)
        {
            IDbTransaction trans = null;
            try
            {
                trans = TransactionManager.CreateTransaction();
                StudentDAL dal = new StudentDAL(trans);
                dal.Save(entity);
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
            finally
            {
                trans.Dispose();
            }
        }

        public void Remove(object id)
        {
            IDbTransaction trans = null;
            try
            {
                trans = TransactionManager.CreateTransaction();
                StudentDAL dal = new StudentDAL(trans);
                dal.Remove(id);
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
            finally {
                trans.Dispose();
            }
        }        
    }
}

솔리드 클래스에서 구성:Table (Name="Student")], 데이터베이스의 테이블 이름: Student
실체 클래스에서 설정: [Id(Name='studentid', Strategy=GenerationType.SEQUENCE)]는 현재 속성이 Student 테이블의 키 ID이고 Name='studentid'는 이 속성이 Student 테이블 열에 대응하는 studentid를 나타낸다. Strategy는 키 생성 전략을 나타내고 여기는 자동으로 증가하는 것을 의미한다.
       [Column(Name="studentno")]
      Stuno  Student     :studentno(     =  )

솔리드 클래스에서 [Column(IsInsert=false)]을 구성하면 현재 열 값이 데이터베이스에 삽입되지 않음(기본값)
솔리드 클래스에서 [Column(IsUpdate=false)]을 구성하면 현재 열 값이 데이터베이스로 업데이트되지 않음(기본값)
(솔리드 클래스 매핑 구성과 일부 이름은 JAVA의 JPA를 참조함)

좋은 웹페이지 즐겨찾기