2011-05-10 2 views
2

일반 poco 객체로 FullTextSession에서 Index 메소드를 호출하면 아래 오류가 발생하고 프록시 객체로 잘 동작합니다.NHibernate 검색 인덱스 poco 객체가 TransientObjectException을 던졌습니다.

스택 트레이스 :

[TransientObjectException : 인스턴스가이 세션과 연결되지 않았습니다] NHibernate.Impl.SessionImpl.GetIdentifier (개체 OBJ) +500

내가 밖으로 성능을 짜내려고 해요 nhibernate select 메서드 다음 코드를 얻었습니다 :

public virtual IList<T> LoadSearch() 
    { 
     return Adapater.Session.QueryOver<T>() 
      .SelectList(e => 
      { 
       e.Select(x => x.Id); 
       e.Select(x => x.Title); 
       e.Select(x => x.Description); 
       return e; 
      }).List<object[]>() 
      .Select(props => new T 
      { 
       Id = (Guid)props[0], 
       Title = (string)props[1], 
       Description = (string)props[2] 
      }).ToList(); 
    } 

프록시 된 결과를 반환하는 방법이 있습니까? 또는 어떻게 목록을 프록시 목록에 적용 할 수 있습니까?

답변

0

세션과 연결된 객체 (즉, 프록시 된 엔티티) 만 인덱싱 할 수 있다고 생각합니다.

돌아 오는 일반 POCO는 NH에서 온 것이 아니므로 NH 세션과 관련이 없습니다.

각 엔티티에 ISession.Lock(instance, NHibernate.LockMode.None);을 사용하여 세션과 연결해 볼 수도 있지만 실제로 작동하는지는 알 수 없습니다.

+0

다시 연결하면 확실하지 않습니다. 다시 연결하려면 세션에서 update()를 호출해야합니다. 세션이 플러시되면 데이터베이스의 현재 항목을 덮어 쓰게됩니다. – Jake

+0

이 경로를 통해 도메인 모델에서 느린로드 연결 및 속성에 대한 유창한 매핑을 변경했습니다. 나는 같은 결과를 얻었지만, NHibernate 프록시에 랩핑 된 객체의 추가 이점을 얻었습니다. – Jake

관련 문제