2010-12-16 2 views
1

방금 ​​프로젝트를 NHibernate 3.0으로 업데이트했고, 일부 기준 문을 LINQ 문으로 변환하려고합니다. 새로운 LINQ 문이 매핑 파일에서 (FluentNHibernate를 사용하여) 선언 한 페칭 규칙을 준수하지 않는 것만 제외하면 모든 것이 잘 작동하는 것 같습니다. 예를 들어글로벌 인출 룰은 Hibernate 3.0의 LINQ 프로 바이더에 의해 존중 받습니까?

: 내가 컬렉션을 기대

var users = Session.Query<User>().ToList(); 

자신의 코스 특성이 열심히로드와 데이터베이스의 모든 사용자로 반환

public UserMap 
{ 
    Id(x => x.Id); 
    References(x => x.Course).Fetch.Join(); 
} 

는 지금은이 같은 모든 사용자를 조회 이는 Criteria 문을 사용할 때 정확히 얻을 수있는 것입니다. 그러나 LINQ 공급자를 사용할 때 NH가 생성 한 쿼리에는 Course 테이블의 조인이 포함되지 않으므로 모든 코스가 지연로드되어야합니다. 이 행동이 예상됩니까? 만약 그렇다면 어떻게 NHibernate가 매핑에서 선언 된 페칭 규칙을 존중하도록 할 수 있습니까?

답변

0

아니요, 그렇지 않습니다. Fetch/ThenFetchFetchMany/ThenFetchMany을 사용하여 eager 가져 오기를 명시 적으로 지정해야합니다.

+1

내 웹 프로젝트 (NHibernate에 대한 참조가없고 어쨌든 전략을 가져 오는 데 신경 쓰지 않아야 함)에 사용되는 IDataContext 인터페이스의 IQueryable 속성으로 노출되므로이 작업은 불가능합니다. – funlambda

1

필자는 동일한 문제와 유사한 솔루션 접근 방식을 저장소에 전송 된 사양과 함께 사용합니다. 각 스펙에는 기준을 지정하는 lamda 표현식이 있습니다. 이전의 Linq 제공 업체가 매핑을 존중했는데 왜 새로운 매핑이 필요하지 않습니까? 또는 최소한 재정의 할 수있는 가능성이 정의 된 매핑의 기본값은 무엇입니까? 이 단점을 수정하는 방법이 있습니까?

관련 문제