在我的应用程序中,我设置了一个三元字典映射,以便对于给定的用户,我可以检索属于该用户的对象的每个实例的“设置”。也就是说,我有类似的东西:
public class User
{
public virtual IDictionary<Baz, BazSettings> BazSettings { get; set; }
//...
所以每当我有一个Baz
对象时,我都可以通过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`
当我改用 anISession
时,问题就消失了。
完整的 NHibernate 错误消息包括文本“没有会话或会话已关闭”。这是有道理的,因为在使用无状态会话时,实体不会连接到会话。但是,我认为有一种方法可以使用无状态会话来执行此查找。
如何使用无状态会话执行查找currentUser.BazSettings[baz]
?