우리는 nHibernate의 Session 기능을 감싸는 NCommon의 UnitOfWorkScope를 사용하고 있습니다. 우리의 목표는 요구에 따라 복잡한 속성을 열심히로드하는 것보다 구성을 통해 항상 열심히로드하는 것입니다. 개념은 엔티티를 검색하는 특정 서비스가 호출 코드에 의해 조금만 사용자 정의 될 수 있다는 것입니다. 때로는 상위 엔티티 만 수화되기를 원할 때도 있고 복잡한 자식 속성을 수화시키는 다른 시간을 원할 수도 있습니다.nHibernate Eager 런타임에 로딩
이를 위해, 우리가하고있는 다음
그 설정이 세션에의하면, 우리는 엔티티 검색 n 일반적인의 IRepository 기능을 사용var iSession = unitOfWorkScope.CurrentUnitOfWork<NHUnitOfWork>().GetSession<ParentEntity>();
iSession.CreateCriteria<ParentEntity>().SetFetchMode("Children", FetchMode.Eager);
: 때, 그러나
var parent = parentRepository.FirstOrDefault(x => x.Id == 123);
을 부모님 확인. 우리가 얻은 어린이 수집 :
NHibernate.Collection.Generic.PersistentGenericBag<ChildEntity>
... 나는 열렬한 적재가 발생하지 않았습니다. 열성적인로드를 항상 강요하도록 NH 맵핑을 수정할 때, 우리는 아이들을 올바르게 봅니다.
누구든지이 문제에 관해 밝힐 수 있습니까? FetchMode.Eager가 무시 된 이후에 뭔가 빠졌다고 가정합니다.
죄송합니다, 당신은 왜 열망 로딩을 가정하는 것은 발생하지 않았다? NHibernate가 가방에 사용하는 클래스입니다. –
Children 속성이 채워지지 않으므로. config를 통해 Eager 로딩을 구성 할 때 우리는 항상 채워진 Children 콜렉션을 얻습니다. 그러나 우리가 Session에서 FetchMode를 통해 런타임에 그것을하려고 할 때, 액세스 할 때 LazyInitializationException을 던지는 PersistentGenericBag를 얻습니다. – znelson
NH의 Session.Query()은 CreateCriteria() 호출을 통해 세션에서 이미 생성 된 기준을 준수하지 않는 것으로 보입니다. 나는 Query()가 호출되었을 때 존중받을 것이라고 생각했지만 분명히 ... ??? –
znelson