2011-01-29 2 views
2

최근 NH의 최신 버전 인 NHibernate 2.1에서 3.0으로 웹 애플리케이션을 업그레이드하기로 결정했습니다. 또한 성숙한 Mono (웹 애플리케이션은 Linux에서만 실행 됨)와의 호환성을 위해 .NET 2.0에서 3.5로 업그레이드하기로 결정했습니다.NHibernate 3.0과 LINQ : 나는 무엇을 놓치고 있습니까?

NHibernate.Linq 네임 스페이스가 릴리스에 포함되어 있기 때문에 LINQ 및 NHibernate에서 약간 연주하고 싶었습니다.

그러나 ISession 인스턴스를 사용하여 LINQ를 쓰려고하면 Linq<T> 메서드가 표시되지 않습니다.

나는 많은 것을 읽었습니다. LINQ를 NH에게 사용하기 위해서는 NHContrib 패키지를 사용해야합니다.

내 질문이

입니다 난 아직도 NHContrib을 다운로드해야합니까? NH 버전 3.0은 NH에 NHContrib의 LINQ보다 훨씬 더 최근, 나는 때문에 비주얼 스튜디오에 Linq에 네임 스페이스가 출시

또는

그것을이다에 포함 된 본 2010 업그레이드 2.0> 3.5 프레임 워크 업그레이드 ? 이중 구조를 확인하고 대상 프레임 워크는 3.5입니다.

불행히도, 난 범용 개발보다는 NH 개발자

감사합니다 더 유용 전체 클래스 문서를 제외 NH 3.0에 대한 포괄적 인 문서를 찾을 수 없습니다.

답변

7

NHibernate에 3.0이 내장 자신의 LINQ의 providerb없는거야, 당신은 .Query < T를 통해 액세스 할 수 있습니다>

그래서 당신은 Ayende의 NHibernate.Linq 제공자를 더 이상 필요하지 않습니다.

또한 NHibernate 3.0 Cookbook이 도움이 될 수 있습니다.

https://www.packtpub.com/nhibernate-3-0-cookbook/book

0

은 또한 붙박이 LINQ 공급자가 Where 조항에 .Equals 방법을 supprort하지 않는 점에 유의 대신 ==를 사용해야합니다. 가 2 배에 NHibernate.Linq와 함께 작동하는 데 사용되는 다음 인스턴스를 들면 : 당신은 더 나은

(from e in myEntities where e.Name.Equals(nameLookup) select e) 
이제

(from e in myEntities where e.Name == nameLookup select e) 
+0

을 할 필요가

설명 할 수

? 개체 사이의 값 비교를 수행해야합니다. 예를 들어 ==와 비교할 수있는 문자열을 표시하지만 개체에 Equals() 메서드가 오버로드되어 기본 키 비교를 수행 할 수 있습니다. 전체 개체가 아닌 기본 키를 명시 적으로 비교해야합니까? 예 (e.Boss.Equals (me)가 e를 선택하는 직원의 e에서 보스가 Person 인 경우), 어떻게해야합니까? –

+0

우리는 또한'=='연산자를 사용합니다 :'e.Boss == me select e' –

+0

(우리 물건은 모두 3.0으로 이전 할 때'.Equals'를 사용했습니다. 쿼리를'=='로 업데이트하면 모두 이전과 같이 작동합니다.) –

관련 문제