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; }
}
이 문제를 피하기 위해 일대일 매핑을 사용하는 것이 좋습니다 http://nhforge.org/doc/nh/en/index.html#mapping-declaration-onetoone – Vadim
그래, 나 실제로는 일대일로 사용했지만 문제가 있었지만 지금은 가져 오기 속성을 구성하지 않았기 때문일 수 있습니다. – Koen