내 앱에서 특정 사용자에 대해 사용자에게 속한 객체의 각 인스턴스에 대해 '설정'을 검색 할 수 있도록 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]
?
데이터베이스에서 데이터를 읽기만하기 때문에 무 상태 세션을 사용하고 싶습니다. 내가 마침내 끝내기 위해서는 HQL 쿼리를 무 상태 세션과 함께 사용하는 것입니다. 그것은 잘 작동하는 것 같다. –
상태 저장 세션은 단지 쓰기 작업이 아닙니다. 게으른로드 및 캐싱은 두 가지 중요한 기능입니다. –