2011-09-21 4 views
0

나는 거의 같은 코드가 있습니다. 나는 Method가 list 요소에 접근 할 수 없다고 생각한다. 디버깅 할 때 변수 값 대신에 다음과 같은 메시지가 있습니다. "이전 기능 평가 시간이 초과 되었기 때문에 기능 평가가 사용되지 않습니다. 기능 평가를 다시 사용하려면 실행을 계속해야합니다". 또는 LazyInitialization 예외 "프록시를 초기화 할 수 없습니다 - 세션 없음". NHibernate 세션 또는 다른 문제가 있습니까? 어떻게 해결할 수 있습니까? 메서드가 너무 많은 시간이 걸리고 가능한 한 빨리 결과를 반환해야하기 때문에 메서드가 별도 스레드에 있습니다.NHibernate에 + 스레드

+1

같은 작업을 수행합니다. 하지만 내 생각에 세션은 더 이상'Method'에서 사용할 수 없습니다. 가장 좋은 선택은'Create'에서 필요한 모든 데이터를 열렬히 가져오고 세션에서 객체를 분리 (제거)하는 것입니다. – Firo

+1

더 나은 것은 새 스레드에서 세션을 가지고 거기에 객체를로드하는 것입니다. –

+0

Firo : 나는 세션에서 Method의 인수로 사용하는 객체를 분리하려고 시도했지만 도움이되지 않는 것처럼 보입니다. Ladislav Mrnka : 코드 중복으로 이어질 것이고 이미 수천 건의 db 호출을 추가했기 때문에 이것이 최선의 방법은 아니라고 생각합니다. 나는 그것이 도움이 될 수 있다고 생각하지만, 더 나은 해결책을 찾는 것이 더 낫다. ( –

답변

1

메서드가 초기화되지 않은 속성에 액세스하려고하기 때문에 LazyInitialization 예외가 발생합니다. 기본적으로 NH 협회는 게으르며로드되므로 NH는 세션에서 데이터를로드하려고 시도합니다. 물론 그 시간까지는 오래 동안 사라져 버렸습니다.

몇 가지 옵션 : '게으른 = false'로

  • 열망로드와 매핑 협회는 귀하의 질의에 연관
  • 을 '의 fetchMode = 가입'

    1. 열망로드는 수동으로 로딩 할 . 엔티티를 얻은 후에는 속성에 액세스하여로드되었는지 확인하거나 연결에 NHibernateUtil.Initialize()를 사용합니다.
    2. 은 definitly DB를 액세스 코드를보고 도움이 될이 http://trentacular.com/2009/08/how-to-use-nhibernate-lazy-initializing-proxies-with-web-services-or-wcf/
  • +0

    FetchMode를 쿼리에서 바꾸는 것이 정말 도움이되었다. 고마워. –