나는 판별 자 역할을하는 나의 POCO 중 하나에 Status
속성을 가지고 있습니다 (enum
과 매우 유사합니다).구분 기호가 프록시로 반환되는 이유는 무엇입니까?
여기에 Status
열이있는 HBM의 일부입니다.
<many-to-one class="Locate.Common.Domain.Statuses.Status, Locate.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="Status">
<column name="Status_id" not-null="true" />
</many-to-one>
그리고 여기에는 Status
테이블 내 HBM입니다.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" name="Locate.Common.Domain.Statuses.Status, Locate.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`Status`">
<id access="nosetter.lowercase-underscore" name="Id" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Status_id" />
<generator class="assigned" />
</id>
<discriminator type="String">
<column name="Status_id" />
</discriminator>
<property access="nosetter.lowercase-underscore" name="Name" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Name" not-null="true" />
</property>
<property access="nosetter.camelcase-underscore" name="IsUserSelectable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="IsUserSelectable" not-null="true" />
</property>
<subclass name="Locate.Common.Domain.Statuses.CallbackStatus, Locate.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" discriminator-value="3" />
<subclass name="Locate.Common.Domain.Statuses.EmergencyStatus, Locate.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" discriminator-value="5" />
<subclass name="Locate.Common.Domain.Statuses.FirstCheckerStatus, Locate.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" discriminator-value="1" />
<subclass name="Locate.Common.Domain.Statuses.PleaseAdviseStatus, Locate.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" discriminator-value="4" />
<subclass name="Locate.Common.Domain.Statuses.SecondCheckerStatus, Locate.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" discriminator-value="2" />
</class>
</hibernate-mapping>
마지막으로 여기에 내 QueryOver
입니다.
var locates =
session.QueryOver(() => locateAlias)
.SelectList(x => x
.Select(xx => xx.WorkToBeginDateTime).WithAlias(() => sentTo.DueDate)
.Select(xx => xx.SendTo).WithAlias(() => sentTo.SentTo)
.Select(xx => xx.TicketNo).WithAlias(() => sentTo.TicketNo)
.Select(xx => xx.Status).WithAlias(() => sentTo.Status)
)
.JoinAlias(() => locateAlias.Status,() => statusAlias)
.Where(() => locateAlias.IsComplete == false)
.TransformUsing(Transformers.AliasToBean<SentToDto>()).List<SentToDto>();
이 쿼리는 그러나 Status
속성이 제대로 초기화하기되지 않는 오류없이 실행됩니다. Status
값을 사용하려면이 예외가 발생합니다.
Initializing[Locate.Common.Domain.Statuses.Status#2]-Could not initialize proxy - no Session.
내가이 사실 적절한
Status_id
을 선택하는 것을 볼 수 NHibernate에 프로파일 러를 찾고 있습니다.
저에게 HBM 또는 쿼리의 문제점은 무엇입니까?
모든 상태를 쿼리하고 모든 상태 식별자 개체의 목록을받을 수 있음을 유의하십시오. NHibernate가 올바른 값을 적절하게 리턴 할 수 있도록 생성 된 프록시 객체가 Status
객체의 올바른 값을 포함하고 있음을 볼 수 있습니다.
나는 그것을 시도했다. 그러나 'Fetch'는 다 대일 관계에서 작동하지 않는다. – gcso
@gcso huh? 왜 안돼? 나는 샘플 애플 리케이션에서 시도하고 Fetch는 many-to-one에서 잘 작동한다. – Firo
'Fetch' 문서는'연관 페치 전략 지정. 현재 일대 다 및 일대일 연결 만 지원됩니다 .' 내가 뭘 놓치고 있는지 궁금해. – gcso