개발/NHibernate
Active Record 와 NHibernate 를 이용한 Web Project 만들기 기본
그저그런보통사람
2010. 11. 1. 19:03
Castle 프로젝트에서 관리하는 Active Record 와 NHibernate 는 ORM 프레임워크이다.
Active Recored 는 Active Record Pattern 을 따르는 프레임워크이며, Fluent NHibernate와 더불어 많이(?) 사용되는 ORM Mappding 도구지만 국내에는 아직 활성화되지 않거나 정보에 대한 노출이 적다.
그럼으로 혼자 맨땅에 헤딩하면서 해야한다. -_-;
NHibernate 프레임워크도 ORM 도구지만 약간 다르게 봐야 하는것이 Active Record( 이하 AR) 는 Nhibernate의 Built in 이라고 보면
된다. 즉, NHibernate의 xml mapping 방식을 클래스 기반 Attribute 로 가능하도록 하여 보다 직관적이고 xml 편집으로 인해 발생할 수
있는 오타나 잘못된 코드를 미연에 방지 할 수 있도록 제작된 도구이다.
자세한 역사나 기능은 스스로 구글링을 통해 확인하기로 하고 .... 이 두 도구를 이용하여 Web 프로젝트를 제작하기 위해선 다음의 단계
를 순서대로 이행하여야 한다.
1. AR를 다운받는다. (Hibernate 도 다운받는다.)
Active Record Download
NHibernate Download
2. 웹 프로젝트를 개설하고, Castle.ActiveRecord.dll 과 NHibernate.dll 참조 추가한다.
(실제로 구동하기 위해서 Castle.Core.dll 과 Castle.Components.Validator.dll 도 요구될 수 있다.)
지연 로딩을 위해서 개인적으로 NHibernate.ByteCode.Castle.dll 을 추가 참조하였다.
3. Web.Config 에 해당 어셈블리를 이용하기 위해 섹션을 등록하고, 해당 노드를 구현한다.
4. Global.ascx 의 Application_Start() 메소드에 다음을 구현한다.
5. 비즈니스 오브젝트를 만들고, Active Record에서 제공하는 Mapping Attirubute를 지정한다.
나머진 다음에.....
Active Recored 는 Active Record Pattern 을 따르는 프레임워크이며, Fluent NHibernate와 더불어 많이(?) 사용되는 ORM Mappding 도구지만 국내에는 아직 활성화되지 않거나 정보에 대한 노출이 적다.
그럼으로 혼자 맨땅에 헤딩하면서 해야한다. -_-;
NHibernate 프레임워크도 ORM 도구지만 약간 다르게 봐야 하는것이 Active Record( 이하 AR) 는 Nhibernate의 Built in 이라고 보면
된다. 즉, NHibernate의 xml mapping 방식을 클래스 기반 Attribute 로 가능하도록 하여 보다 직관적이고 xml 편집으로 인해 발생할 수
있는 오타나 잘못된 코드를 미연에 방지 할 수 있도록 제작된 도구이다.
자세한 역사나 기능은 스스로 구글링을 통해 확인하기로 하고 .... 이 두 도구를 이용하여 Web 프로젝트를 제작하기 위해선 다음의 단계
를 순서대로 이행하여야 한다.
1. AR를 다운받는다. (Hibernate 도 다운받는다.)
Active Record Download
NHibernate Download
2. 웹 프로젝트를 개설하고, Castle.ActiveRecord.dll 과 NHibernate.dll 참조 추가한다.
(실제로 구동하기 위해서 Castle.Core.dll 과 Castle.Components.Validator.dll 도 요구될 수 있다.)
지연 로딩을 위해서 개인적으로 NHibernate.ByteCode.Castle.dll 을 추가 참조하였다.
3. Web.Config 에 해당 어셈블리를 이용하기 위해 섹션을 등록하고, 해당 노드를 구현한다.
<configSections>- web에서 사용하기 위해선 activeRecord 노드의 isWeb="true"를 반드시 설정해야한다.
<section name="activeRecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
</configSections>
<activeRecord isWeb="true">
<config>
<add key="connection.driver class" value="NHibernate.Driver.SqlClientDriver"/>
<add key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/>
<add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle" />
<add key="connection.connection_string" value="Data Source=119.205.211.227;initial catalog=LearningManagementSystem;User Id=sa;Password=ilat71###"/>
</config>
</activeRecord>
4. Global.ascx 의 Application_Start() 메소드에 다음을 구현한다.
Castle.ActiveRecord.Framework.IConfigurationSource source
= System.Configuration.ConfigurationManager.GetSection("activeRecord")
as Castle.ActiveRecord.Framework.IConfigurationSource;
Castle.ActiveRecord.ActiveRecordStarter.Initialize(typeof(LMSEngine.Models.Company).Assembly, source);
5. 비즈니스 오브젝트를 만들고, Active Record에서 제공하는 Mapping Attirubute를 지정한다.
[ActiveRecord("[companies]")]
public class Company : ActiveRecordBase<Company>
{
[PrimaryKey(Column="CompanyId")]
public string Id { get; set; }
[Property]
public string CompanyName { get; set; }
[BelongsTo(Column="CompanyId")]
public string CompanyGroup { get; set; }
[HasMany(typeof(Member),
Table = "[companies]",
Inverse = true,
ColumnKey = "CompanyId",
Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)]
public IList<Member> Members { get; set; }
}
나머진 다음에.....