2010-08-06 5 views
2

데이터베이스에서 인스턴스를 요청할 때 FetchMode.Eager 구문을 사용하여 열심히로드하는 하위 엔티티로 FNH를 통해 여러 엔티티를 구성했습니다. 이제는 매핑에서 게으른로드를 무시하고 하위 엔티티를 '실제'데이터로 채우는 인상을 받고있었습니다. 나는 개체의 컬렉션을 반복하고 결과 세트를 생성하는 Parallel.ForEach를 사용하고자하기 때문에(Fluent) Nhibernate 지연로드 및 Parallel.ForEach에 대한 영향

내가 이렇게 할 이유가 있지만, 나는 다음과 같은 오류 얻을 :

[18000] System.InvalidOperationException: 
There is already an open DataReader associated with this Command 
which must be closed first. 

내가 만약을 'NHibernateUtil.Initialize'를 사용하여 모든 자식 엔티티를 초기화하면 예상대로 작동합니다.

FetchMode.Eager의 사용에 대한 이해가 잘못 되었습니까?

답변

1

나는 정말로 그렇게하려고하지 않을 것이다. 각 Parallel.ForEach func은 다른 스레드에서 실행될 수 있습니다. 당신의 설정에 따라, NHibernate Session은 쓰레드에 저장된다. 호출하는 쓰레드가 세션에 접근 할 수 없다는 것을 의미한다. 그래서 모든 것이 실패한다.

개인적으로 나는 모든 것을 전송 객체로 가져 와서 Parallel.ForEach를 수행합니다.

+0

나는 모두 알고 있으므로 'NHibernateUtil.Initialize'를 사용하십시오. – AwkwardCoder

+0

그건 중요하지 않습니다. 객체에는 여전히 컨텍스트가 존재할 것으로 예상되는 프록시가 있으며, 다른 스레드에있는 경우에는 그렇지 않습니다. – Deleted

+0

NHibernateUtil.Initialize는 프록시를 제거합니다 .... – AwkwardCoder