3

내 앱에서 특정 사용자에 대해 사용자에게 속한 객체의 각 인스턴스에 대해 '설정'을 검색 할 수 있도록 3 진 사전 매핑을 설정합니다. 나는 Baz 오브젝트있을 때마다 무국적 세션을 사용하여 사전 값을 게으른 조회

public class User 
{ 
    public virtual IDictionary<Baz, BazSettings> BazSettings { get; set; } 

    //... 

그래서, 내가 currentUser.BazSettings[baz]를 통해 현재 사용자의 바즈 설정을 조회 할 수 있습니다 : 그것은 내가 좋아하는 무언가가있다.

는 내가이 일을 무 상태 세션을 사용할 수 있도록하고 싶습니다,하지만 난이 코드와 LazyInitializationException을 얻을

:

//int bazId; 
using (IStatelessSession session = Global.SessionFactory.OpenStatelessSession()) 
{ 
    var currentUser = session.Get<User>(Membership.GetUser().ProviderUserKey); 
    var baz = session.Get<Baz>(bazId); 
    var bazSettings = currentUser.BazSettings[baz]; // raises `LazyInitializationException` 

내가 ISession 대신 사용하는 경우는, 다음 문제는 사라집니다.

전체 NHibernate 오류 메시지에 "세션 또는 세션이 닫혔습니다."라는 텍스트가 포함되어 있습니다. 상태 비 저장 세션을 사용할 때 엔티티가 세션에 연결되지 않기 때문에 이는 의미가 있습니다. 그러나, 나는이 룩업을 수행하기 위해 무국적 세션을 사용하는 방법이 있다고 생각한다.

무응답 세션을 사용하여 조회를 수행하는 방법 currentUser.BazSettings[baz]?

답변

0

무 상태 세션은 을 정확히 때문에, 게으른 로딩을 지원하지 않습니다 : 그들은 그들과 함께 검색 엔티티에 대한 아무것도를 추적하지 않습니다.

유일한 방법은 컬렉션을로드하는 것이 좋습니다. 그렇다면 은 무의미한 세션을 사용하고 싶습니다. 분명히 필요한 것을 제공하지 않는다면을 사용 하시겠습니까?

+0

데이터베이스에서 데이터를 읽기만하기 때문에 무 상태 세션을 사용하고 싶습니다. 내가 마침내 끝내기 위해서는 HQL 쿼리를 무 상태 세션과 함께 사용하는 것입니다. 그것은 잘 작동하는 것 같다. –

+0

상태 저장 세션은 단지 쓰기 작업이 아닙니다. 게으른로드 및 캐싱은 두 가지 중요한 기능입니다. –

0

상태 비 저장 세션을 사용하여 수행 된 작업이 연관된 인스턴스로 계단식으로 연결되지 않으며 수집이 비 상태 세션에서 무시되므로 IStatelessSession 대신 ISession을 사용해야합니다.

+0

계단식 배열은 이와 관련이 없습니다. –

+0

예, 디에고, 당신 말이 맞아요, 고마워요. –

관련 문제