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를 참조함)