C #에서 Fluent NHibernate로 작업하는 방법

ORM (객체 관계형 매퍼)은 코드를 작성하여 CRUD (만들기, 읽기, 업데이트 및 삭제) 작업을 수행 할 수 있도록하여 애플리케이션에서 데이터 액세스를 단순화합니다. ORM 프레임 워크는 애플리케이션에서 객체와 데이터 모델 사이에 존재하는 임피던스 불일치를 제거하기 위해 오랫동안 사용되어 왔습니다. 본질적으로 ORM을 사용하면 기본 데이터베이스 공급자와 직접 상호 작용할 필요없이 CRUD 작업을 수행하는 코드를 작성할 수 있습니다. 따라서 ORM을 사용하면 데이터 모델에서 애플리케이션의 개체 모델을 분리하는 데 도움이됩니다.

Fluent NHibernate가 필요한 이유

NHibernate는 매핑 정보를 .hbm 파일에 XML 형식으로 저장합니다. 각 엔티티 클래스에 대해 하나의 .hbm 파일이 있어야합니다. 이 .hbm 파일은 엔티티를 해당 데이터베이스 테이블에 매핑하는 데 사용됩니다. Fluent NHibernate를 사용할 때 NHibernate로 작업 할 때 사용해야했던 번거로운 .hbm.xml 파일을 더 이상 사용할 필요가 없습니다.

Fluent NHibernate는 POCO 클래스와 NHibernate 엔진 간의 매핑을 생성하는 데 사용할 수있는 인기있는 ORM 도구 인 NHibernate의 정적으로 컴파일되고 컴파일 된 안전한 대응 물로 성가신 XML 파일이 필요하지 않습니다. Fluent API를 제공하여 LINQ를 사용하여 NHibernate 엔진 위에 데이터를 쿼리 할 수도 있습니다. 다음 섹션에서는 Fluent NHibernate를 설치하고, 모델을 만들고, 이러한 모델 또는 엔티티 클래스를 매핑하고, Fluent NHibernate를 사용하여 CRUD 작업을 수행하는 방법에 대해 설명합니다.

시작하기

Fluent NHibernate 사용을 시작하려면 다음 단계를 따르십시오.

  1. Visual Studio 2015 IDE 열기
  2. 파일-> 새로 만들기-> 프로젝트를 클릭하십시오.
  3. 새 프로젝트 만들기 – 단순성을 위해 Windows 응용 프로그램을 만듭니다.
  4. 프로젝트의 이름을 지정하십시오.
  5. 확인을 클릭하여 프로젝트를 저장하십시오.

이제 Visual Studio에서 프로젝트가 생성되었으므로 Fluent NHibernate를 설치하여 애플리케이션에서 사용할 수 있습니다. NuGet이 설치되어있는 경우 가장 쉬운 옵션은 NuGet 패키지 관리자를 통해 Fluent NHibernate를 설치하는 것입니다. 이렇게하려면 솔루션 탐색기 창에서 프로젝트를 선택하고 마우스 오른쪽 단추를 클릭하고 "NuGet 패키지 관리…"옵션을 선택하여 NuGet에서 Fluent NHibernate 프레임 워크를 설치합니다.

Fluent NHibernate 작업

Fluent NHibernate로 작업하려면 먼저 모델 클래스를 만들어야합니다. 다음 데이터베이스 테이블을 고려하십시오.

CREATE TABLE [dbo].[Product]

(

   [Id] INT NOT NULL PRIMARY KEY,

   [Name] VARCHAR(50) NULL,

   [Description] VARCHAR(50) NULL

)

다음은 해당 모델 클래스입니다.

public class Product

   {

       public virtual int Id { get; set; }

       public virtual string Name { get; set; }

       public virtual string Description { get; set; }

   }

이제 데이터베이스 테이블과 해당 모델 클래스가 준비되었으므로 다음 단계는 필요한 매핑을 만드는 것입니다. Fluent NHibernate에서 엔티티를 매핑하려면 해당 매핑 클래스가 있어야합니다. 이러한 매핑 클래스는 T가 사용중인 엔터티를 나타내는 ClassMap에서 파생되어야합니다. Fluent NHibernate는 강력한 형식의 C # 클래스를 사용하여 모델 클래스의 속성을 데이터베이스 테이블의 해당 필드에 매핑합니다.

다음은 ProductMap이라는 매핑 클래스입니다.

public class ProductMap : ClassMap

   {

       public ProductMap()

       {

           Id(x => x.Id);

           Map(x => x.Name);

           Map(x => x.Description);

           Table("Product");

       }

   }

다음 단계는 데이터베이스에 연결할 도우미 클래스를 만드는 것입니다. 이 클래스는 다음과 같습니다.

public static class FluentNHibernateHelper

   {

       public static ISession OpenSession()

       {

string connectionString = "Write your database connection string here";

           ISessionFactory sessionFactory = Fluently.Configure()

               .Database(MsSqlConfiguration.MsSql2012

                 .ConnectionString(connectionString).ShowSql()

               )

               .Mappings(m =>

                         m.FluentMappings

                             .AddFromAssemblyOf())

               .ExposeConfiguration(cfg => new SchemaExport(cfg)

                .Create(false, false))

               .BuildSessionFactory();

           return sessionFactory.OpenSession();

       }

   }

마지막 문에서 sessionFactory.OpenSession ()에 대한 호출에 유의하십시오.이 호출은 실제로 기본 데이터베이스와의 통신 세션을 만듭니다. 즉, 사용중인 데이터베이스에 대한 연결을 엽니 다. 이제 정적 메서드 FluentNHibernateHelper.OpenSession ()을 호출하여 데이터베이스에 대한 연결을 열 수 있습니다. 다음 코드 조각은 앞에서 만든 도우미 클래스를 활용하여 Product 데이터베이스 테이블에 제품 레코드를 추가하는 방법을 보여줍니다.

static void Main(string[] args)

       {

           using (var session = FluentNHibernateHelper.OpenSession())

           {

               var product = new Product { Name = "Lenovo Laptop", Description = "Sample product" };

               session.SaveOrUpdate(product);

           }

       }

다음 코드 스 니펫은 Fluent NHibernate 도우미 클래스를 사용하여 데이터베이스에서 데이터를 쿼리하는 방법을 보여줍니다.

using (ISession session = FluentNHibernateHelper.OpenSession())

           {

               var products = session.Query().ToList();

               //Usual code

           }

이 기사에 제공된 코드 예제로 작업하려면 다음 네임 스페이스가 클래스에 추가되었는지 확인해야합니다.

  • FluentNHibernate.Cfg 사용;
  • FluentNHibernate.Cfg.Db 사용;
  • NHibernate 사용;
  • NHibernate.Linq 사용;
  • NHibernate.Tool.hbm2ddl 사용;
  • System.Linq 사용;

GitHub에서 Fluent NHibernate 작업에 대해 자세히 알아볼 수 있습니다.