NHibernate-개요
이 장에서는 NHibernate가 무엇인지, 구현 가능한 모든 플랫폼, 장점 및 이와 관련된 기타 측면에 대해 논의 할 것입니다.
NHibernate 란 무엇입니까?
NHibernate는 .NET 프레임 워크를위한 성숙한 오픈 소스 객체 관계형 매퍼입니다. 적극적으로 개발되고 모든 기능을 갖추고 있으며 수천 개의 성공적인 프로젝트에 사용됩니다. 그것은 위에 구축ADO.NET 현재 버전은 NHibernate 4.0.4.
NHibernate는 오픈 소스 .NET 객체 관계형 매퍼이며 GNU Lesser General Public License.
인기있는 Java 객체 관계형 매퍼 인 Hibernate를 기반으로하며 매우 성숙하고 활동적인 코드 기반을 가지고 있습니다.
객체 지향 도메인 모델을 기존의 관계형 데이터베이스에 매핑하기위한 프레임 워크를 제공합니다.
NHibernate는 다음에 의해 시작되었습니다. Tom Barrett 그리고이 프로젝트는 2003 년 2 월에 처음으로 시작되었습니다.
그것은 큰 프로젝트이며 많은 기능을 제공합니다.
이있다 NuGet package 프로젝트에 쉽게 추가 할 수 있습니다.
왜 NHibernate인가?
이제 질문은 왜 우리가 필요합니까? object-relational mappers? 대상 세계와 관계 세계 사이에 단절이 있기 때문입니다.
객체 세계에서 모든 것은 objects; 우리는 데이터가있는 것을 객체라고 부릅니다.
관계형 세계는 모두 집합 기반이며 객체 세계와 다른 테이블과 행을 다루고 있습니다.
객체 세계에서 우리는 unidirectional associations. 고객이 주문에 대한 포인터를 가지고 있다고해서 반드시 주문에 고객에 대한 포인터가 있다는 것을 의미하지는 않으며 그렇지 않을 수도 있습니다.
관계형 세계에서 모든 연관은 bidirectional 외래 키로 수행 할 수 있습니다.
모든 연관은 본질적으로 양방향이므로 객체 관계형 매핑을 처리 할 때 이러한 연결 끊김도 처리해야합니다.
객체 세계에서는 단방향 포인터로 작업하는 반면, 관계형 세계에서는 본질적으로 양방향 인 외래 키를 사용합니다.
객체 세계는 상속이라는 개념을 가지고 있습니다. 자동차는 여러 가지 하위 클래스를 가질 수 있습니다. 따라서 자동차는 차량 유형이고 보트는 자동차 유형이며 스포츠카는 자동차 유형입니다. 상속 관계.
관계형 세계에는 이러한 상속 개념이 없습니다.
매핑
그래서 우리는이 모든 것을 어떻게 매핑합니까? disjoint relationships?이 매핑 개념은 객체 관계형 매퍼에서 비롯됩니다. 다음 다이어그램과 같이 주로 이해해야 할 세 가지가 있습니다.
애플리케이션에는 클래스 정의가 필요합니다. 일반적으로 C # 코드와 Employee 클래스, Customer 클래스, Order 클래스 등과 같은 클래스를 나타내는 .NET 코드입니다.
맨 아래에서 데이터베이스 스키마를 볼 수 있습니다. Data Definition Language 고객 테이블의 모양, 직원 테이블의 모양을 지정하는 관계형 데이터베이스에서.
이 사이에는 행과 열 및 외래 키 관계의 관점에서 C #의 개체 세계에서 데이터베이스 세계로 변환하는 방법을 개체 관계형 매퍼에게 알려주는 매핑 메타 데이터가 있습니다.
이 매핑 메타 데이터는 다양한 방식으로 표현 될 수 있으며 NHibernate 애플리케이션에서 가장 일반적인 여러 가지 방식을 살펴볼 것입니다.
다음과 같이 표현됩니다. HBM (Hibernate Mapping) XML 파일 인 파일.
지원되는 데이터베이스
NHibernate는 다양한 데이터베이스를 지원합니다. 기존의 관계형 데이터베이스는 NHibernate에 액세스 할 수 있습니다.
SQL 서버는 기본적으로 지원되는 데이터베이스이며 대부분의 개발자가 개발 중에 사용하고 있으며 아마도 가장 일반적인 데이터베이스 일 것입니다.
또한 works very well with Oracle.
또한 DB2, Firebird, MySQL, PostgreSQL, SQL Lite를 지원합니다.
또한 갖는다 ODBC and OLEDB drivers.