2011-05-05 2 views
1

NHibernate에 매핑 된 두 클래스가 있습니다. class 응용 프로그램은 StoreId 속성을 가진 Store를 참조합니다. Store 사용자에게는 ID가 할당되어 있지만이 경우 중요한 것은 아닙니다.양방향 many-to-one 생성 SELECT N + 1

ApplicationUser 매핑 :

<many-to-one name="Store" column="StoreId" class="Store" /> 

스토어 매핑 : 나는 모든 상점을로드 할 때, 오브젝트 그래프를 구축 할 때 외부 다음 예상대로 ApplicationUser에 발생하지만, 조인 왼쪽

<many-to-one name="ApplicationUser" column="Id" class="ApplicationUser" 
    property-ref="Store" insert="false" update="false" 
    fetch="join" outer-join="true" /> 

NHibernate는 ApplicationUser를 참조하지 않는 모든 저장소에 대해 여분의 SELECT ... FROM ApplicationUser WHERE StoreId = ?을 수행하기로 결정합니다.

이것은 과도한 잔인한 행위로, 해당 ApplicationUsers가 존재하지 않는다는 것을 이미 알고 있기 때문에 완전히 불필요합니다.

누구나 NHibernate가 이러한 추가 쿼리를 생성하는 것을 멈출 수있는 방법을 알고 있습니까?

는 편집 :

클래스는 다음과 같이 매우 기본적인 :

public class Store 
{ 
    public virtual int Id { get; set; } 
    // ... 
    public virtual ApplicationUser ApplicationUser { get; set; } 
} 

public class ApplicationUser 
{ 
    public virtual int Id { get; set; } 
    // ... 
    public virtual Store Store { get; set; } 
} 
+1

이 문제를 피하기 위해 일대일 매핑을 사용하는 것이 좋습니다 http://nhforge.org/doc/nh/en/index.html#mapping-declaration-onetoone – Vadim

+0

그래, 나 실제로는 일대일로 사용했지만 문제가 있었지만 지금은 가져 오기 속성을 구성하지 않았기 때문일 수 있습니다. – Koen

답변

0

나는 여기에서 일어나고있는 것은 당신이 각각 '로 지정있어로 nHibernate 수는 모두 컬렉션을로드하려고 시도하는 것을 생각 many to one '... 당신이 당신의 맵핑을 수정할 때 할 수있는 일이 없다고 생각합니다. ...

그래서 a -> xb와 b -> xa, nHibernate는 둘 다 질의를 가질 것입니다. 관계 ... 나에게.

쿼리에 포함 할 수없고 컬렉션이 필요하지 않은 경우 지연로드에 의존 할 수 없습니다.