본문 바로가기

IT/C#, NHibernate

nHibernate를 이용한 데이터 모델링 방법

반응형

1. DB 모델링
작업 순서
  • database 모델링
  • Database 를 C# class 모델로 생성
  • nhinbernate에서 제공하는 cfg.xml과 nhm



nhibernate를 실습하기 위한 Db를 요렇게 만들었다
CREATE TABLE [dbo].[Contact] (
                [FirstName] [varchar] (50) NULL,
                [LastName] [varchar] (50) NULL,
                [ID] [int] IDENTITY(1 ,1) NOT NULL,
 CONSTRAINT [PK_Contact] PRIMARY KEY CLUSTERED
(
                [ID] ASC
)WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF , IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
) ON [PRIMARY]


클래스로 선언하면 
namespace NHibernateTutorialPart1
{
    public class Contact
    {
        public virtual int ID { get; set ; }
        public virtual string FirstName { get; set ; }
        public virtual string LastName { get; set ; }

    }
}


요렇게 생겻지...

1.1 xml document 만들고 파일명은 hibernate.hbm.xml로 하자
파일명에 hbm가 들어가 있어야 NHibernate가 자동으로 분석한다.

1.2 hibernate.hbm.xml에 스키마 설정
myDB.hbm.xml 클릭후 nhibernate에서 받은 1번에서 다운받은 hibernate-datamapping.xsd를 적용해야한다.
적용방법은 그림처럼



1.3 nhibernate 설정
새로운 xml 를 추가하고 파일명은 hibernate.cfg.xml 로 하자
다음 내용을 추가하자.

<?xml version=" 1.0" encoding=" utf-8" ?>
<hibernate-configuration xmlns=" urn:nhibernate-configuration-2.2">
  <session-factory>
    < property name ="connection.provider ">
      NHibernate.Connection.DriverConnectionProvider
    </ property>
    < property name ="dialect ">
      NHibernate.Dialect.MsSqlCeDialect
    </ property>
    < property name ="connection.driver_class ">
      NHibernate.Driver.SqlClientDriver
    </ property>
    < property name ="connection.connection_string ">
      Data Source=localhost;Initial Catalog= <!--Database Name--> ;Integrated Security=True;Pooling=False
    </ property>
    < mapping assembly ="NHibernateTutorialPart1 "/>
  </session-factory>
</hibernate-configuration>

1.4 *.xml 속성 변경
hibernate.cfg.xml, hibernate.hbm.xml 파일 속성에서 

빌드작업, 출력 디렉터리로 복사를 포함 리소스, 항상복사로 변경할것

2. Database 연결 프로그램 작성

 private void Form1_Load(object sender, EventArgs e)
        {
            cfg = new Configuration ();
            cfg.Configure( "hibernate.cfg.xml");
            mySessionFactory = cfg.BuildSessionFactory();
            mySession = mySessionFactory.OpenSession();

            using (mySession.BeginTransaction()) {
                Contact loContact = new Contact { FirstName = "abc", LastName = "Last" };
                mySession.Save(loContact);
                mySession.Transaction.Commit();
            }
        } 

3. 최종 프로젝트 모양