NHibernate는 확실히 당신의 인생을 더 쉽게 만들 수 있습니다. ORM을 사용할 때 비즈니스 모델의 변경 사항을 충족하기 위해 데이터베이스 스키마를 리팩터링하는 것을 방해하는 저장 프로 시저 API가 없기 때문에 데이터베이스 스키마를 확실히 업데이트하는 것이 훨씬 쉽습니다.
OR 매퍼는 제공 할 LOT가 많으며 개발자 커뮤니티의 상당 부분과 거의 모든 DBA 커뮤니티가 오해하고 있습니다.
일반적으로 저장 프로 시저는 데이터베이스에서 성능을 튜닝하는 옵션을 더 많이 제공합니다. 출력을 변경하지 않는 한 저장 프로 시저를 자유롭게 다시 작성할 수 있기 때문입니다. 그러나 결과적으로 발생할 수있는 다른 문제로 인해 저장 프로 시저가 거의 다시 작성되지 않습니다 (예 : 새 버전의 소프트웨어를 배포 할 때 기존 procs의 수정 된 버전이 변경된 최적화 된 버전을 덮어 씁니다. 따라서 DBA에 의해 이익이 상실되고 유지 보수 및 예상치 못한 성능 문제가 발생합니다.)
또 다른 오해입니다 (주로 SQL Server 캠프에서 발생합니다 ... Oracle에 대한 경험이 거의 없음). 저장 프로 시저 (Stored Procedures)만이 컴파일되고 실행 계획이 캐싱 될 수 있다는 것입니다. SQL Server와 관련하여 모든 매개 변수가있는 쿼리는 컴파일되고 캐시 될 수 있습니다.
OR 매퍼의 장점은 저장 프로 시저에서 적응성이 있다는 것입니다. 저장 프로 시저를 사용하면 쿼리가 실행될 때 문맥에 관계없이 사용되는 단일 문을 작성하게됩니다. LINQ to SQL은 내가 본 것 중 가장 효율적인 쿼리를 생성 할 수있는 놀라운 능력을 가지고 있으며 종종 심각한 루프에 대해 DBA를 던졌습니다. 나는 L2S에 의해 생성 된 DBA의 질의를 보았습니다. 서브 쿼리와 비논리적 인 것들로 가득차 있으며 즉시 비웃었습니다. 그러나 문제가 있다고 가정하면 DBA가 작성한 쿼리의 성능 (즉, 물리적 읽기)이 현저하게 열등 해졌습니다. (때로는 DBA에 대한 L2 읽기와 물리적 읽기가 각각 30 회의 물리 읽기로 확장되었습니다.)
DBA의 관점에서 볼 때 ORM은 동적 SQL을 생성하기 때문에 이러한 쿼리를 최적화 할 수있는 방법이 없습니다. 반대로 SQL Server는 SQL Server에만 국한되며 SQL Server는 여러 가지 최적화 경로 (수평 및 수직 테이블 분할, 모든 테이블 또는 뷰에 대한 물리적 파일 배포, 인덱스 등)를 제공합니다. 쿼리를 수정해야 할 필요성이 제기됩니다. 쿼리를 수정해야하는 경우에도 SQL Server 2005 이상에서는 Plan Guides라는 명령을 제공합니다.이 가이드를 사용하면 모든 쿼리 (저장된 proc, strait SQL 등)를 적절하게 조정할 수 있습니다. 쿼리를 조정하는 것만으로는 충분하지 않은 경우 특정 쿼리를 전체 대체 쿼리와 일치시켜 DBA가 필요한만큼 쿼리를 조정할 수 있습니다. (최후의 수단으로 사용하십시오.)
OR 매퍼를 사용하면 얻을 수있는 많은 이점이 있으며 NHibernate는 무료입니다 (LLBLGen도 훌륭하지만 무료는 아닙니다.) LINQ to Sql 및 Entity Framework는 Microsoft의 새로운 제품입니다 (L2S는 곧 .NET 4.0 프레임 워크에서 EF 4.0으로 대체 될 예정입니다 ... ORM을 채택하는 데있어 가장 큰 장애물은 일반적으로 ORM 제품 자체도 아니며 기능 또는 공연. 가장 큰 장애물은 일반적으로 귀하의 DBA를 (귀하의 행운/불행에 달려 있습니다 ... 귀하의 경험에 달려 있다면 ...) ORM이 DBA의 최적화 경로 비용없이 효율성을 향상시키고 유지 보수 비용을 줄일 수 있다는 것입니다.
동의어, 객체 속성 매핑은 XML 매핑보다 훨씬 간단합니다. XML 매핑이 필요한 유일한 시간은 데이터 객체가 제한이 없거나 컴파일 된 경우입니다. – Soviut
Errr ... 유창 NHIbernate는 속성 매핑이 아닙니다. wiki.fluentnhibernate.org – jfar