2010-08-02 5 views
3

Fluent NHibernate 또는 NHibernate, 어느 것이 우리가 linq 지원을 위해 선호해야 하는가?Fluent NHibernate 또는 NHibernate for Linq?

+9

전혀 이해가되지 않습니다. 그것은 당신이 Windows 나 Word에서 PDF 지원을 선호하는지 묻는 것과 같습니다. – mlarsen

+6

@ mlarsen - 제가 비유를 좋아했기 때문에 여러분의 의견을지지했지만, 저는 Sergen에게이 질문에 어려움을 겪어야한다고 생각하지 않습니다. 이것은 초보자를 포함한 모든 사람들을위한 프로그래밍 Q & A 사이트입니다. Hibernate는 새로 온 사람들에게 매우 혼란 스러울 수있다. 당신을 단색하지 않기 위해, 나는 많은 사람들로부터이 사이트에 대한 질문에 답하는 태도보다 훨씬 더 holier-than-thou 태도를 느낄 때가 많습니다. 그렇게해서는 안됩니다. Windows 나 Word에 완전히 익숙하지 않은 사람이 PDF 지원을 위해 어떤 것이 더 좋았는지 질문했습니다. –

+0

[NHibernate - 좋은, 나쁜, 그리고 추한, 그것이 도착!] (http://izlooite.blogspot.com/2011/04/nhibernate-good-bad-and-ugly-that-it.html) –

답변

22

유창한 NHibernate는 Configuration에서 왔고 Linq는 질의를위한 것입니다. 그들은 서로 다른 일을하고 동시에 두 가지를 모두 사용할 수 있습니다. Fluent NHibernate는 NHibernate 나 Linq 대신에 XML 파일을 사용하는 대신 코드로 NHibernate를 설정하는 데 도움을주는 도우미 라이브러리 일뿐입니다.

+0

아직도 - 어느 것을 선택할 것입니까? : o) –

+1

@Arnis : 둘 다. 그것은 내가하는 일입니다. – rebelliard

+0

@Arnis 여전히 유효하지 않은 '또는'질문입니다. – mayu

4

당신이 NHibernate를 사용할 때 당신은 당신의 객체들에 대한 매핑과 그 객체들을 CRUD하기위한 쿼리 (LINQ)를 생성 할 것입니다. Hibernate는 XML 매핑 파일을 사용한다. Fluent NHibernate는 규칙이나 다른 방법을 기반으로 당신을 위해 매핑 파일을 생성합니다. 따라서 FNHib를 사용하는지 여부는 중요하지 않습니다. Linq, Hql, Criteria 또는 QueryOver를 사용하여 객체를 쿼리 할 수 ​​있으며 여전히 Hibernate를 사용하려고합니다.

0

NHibernate에은 - XML

유창함 NHibernate에에 구성 쓰기 - 안전 유형 C# 또는 VB.NET의 구성을 쓰기

원하는 경우 유창함 자 NHibernate를 선택해야 XML로 구성을 작성하는 것은 안전하고 싫어합니다. 따라서 모든 변경 사항을 쉽게 이름을 바꿀 수 있으며 리팩터입니다. 그냥 도트를 입력하면 인텔리 센스이 문서화에 많은 도움이됩니다. 첫 번째 설정을 작성하는 데는 시간이 걸리지 만 매우 쉽다는 것을 알고 있습니다.

Fluent NHibernate에서 Linq은 NHibernate와 동일합니다. 왜냐하면 다른 답변처럼, Fluent NHibernate는 단지 설정을위한 것이기 때문에 NHibernate를 쉽게 사용할 수 있고, 나머지는 NHibernate에서 온 것입니다. 예를 들면 :

 var maleCustomers = (from t in Session.Query<Entities.Customer>() 
        where t.Gender == Gender.Male 
        select t).ToList(); 

내가 유창함 자 NHibernate를 사용하지만 당신이 바로 .Query<>를 클릭하면 "정의로 이동"당신은 namespace NHibernate.Linq에서 온 발견했다. 그래서 어느 쪽이든 실제로 동일한 Linq를 사용합니다.

당신은 단지 Linq가 NHibernate 대 SQL에 대한 Linq가 내장되어 있다고 말했다면. 그 차이가 확실하지 않습니다. 나는 그것도 똑같다고 생각했지만 좀 더 복잡한 방식으로 쿼리하려고하면 예외가 던져 지거나 단순히 빈 SQL 쿼리를 던질 것이다.

결론 : 당신이 Linq에 대해 선택하는 하나의 방법은 NHibernate에 Linq에, 그냥 동일합니다.

0

NHibernate 용 Fluent는 DBA 팀 (있는 경우)에서 데이터베이스 규칙을 정의 할 수있는 CodeFirst 환경에서 매우 잘 작동합니다. 이렇게하면 POCO에서 매우 일관된 실제 모델을 만들 수 있습니다.

레거시 데이터베이스의 경우 Fluent Conventions을 사용할만큼 데이터베이스가 일관성이없는 시간을 처리하려면 Fluent Overrides가 거의 항상 필요합니다. 유창한 오토 맵핑은 사용자 정의 속성을 생성하고 자동 매핑 규칙에서이를 읽음으로써 쉽게 확장 될 수 있습니다.

질의가 진행되는 한 질의를 위해서만 LINQ를 사용하고 싶지는 않을 것입니다. NHibernate LINQ 구현과 LINQ는 일반적으로 원하는 조인과 쿼리를 설명하는 가장 좋은 작업을 항상 수행하지는 않습니다.예를 들어,이 글을 쓰는 시점에서 LEFT OUTER JOINS는 NHibernate LINQ 구현에서 지원되지 않았다. LINQ는 읽기가 쉽고 대부분 잘 수행 할 수 있지만 더 잘 제어하려면 LINQ 쿼리와 함께 HQL 또는 ICriteria 쿼리를 사용하는 것이 좋습니다.

나는 보통 log4net에 대한 NHibernate.SQL 로거와 함께 show_sql을 켜고 내 쿼리가 SQL에서 DB까지 만드는 것을 확인한다.

내 조인이나 "열망하는 가져 오기"를 제어하려는 상황에서 간혹 HQL 또는 ICriteria을 선택하여 NHibernate가 내 쿼리에서 수행하는 작업을보다 잘 제어 할 수 있습니다.

본질적으로 Fluent는 객체와 여러 접근법 (LINQ, HQL 및 ICritieria)을 매핑 할 때 많은 유연성을 제공하므로 거의 모든 쿼리/튜닝 상황을 처리 할 수 ​​있습니다.