使用无状态会话延迟查找字典值
在我的应用程序中,我设置了一个三元字典映射,以便对于给定的用户,我可以为属于该用户的对象的每个实例检索“设置”。 也就是说,我有类似的东西:
public class User { public virtual IDictionary BazSettings { get; set; } //...
所以每当我有一个Baz
对象时,我都可以通过currentUser.BazSettings[baz]
查找当前用户的baz设置。
我希望能够使用无状态会话来执行此操作,但是我使用以下代码获得了LazyInitializationException
:
//int bazId; using (IStatelessSession session = Global.SessionFactory.OpenStatelessSession()) { var currentUser = session.Get(Membership.GetUser().ProviderUserKey); var baz = session.Get(bazId); var bazSettings = currentUser.BazSettings[baz]; // raises `LazyInitializationException`
当我使用ISession
,问题就会消失。
完整的NHibernate错误消息包括文本“没有会话或会话已关闭”。 这是有道理的,因为在使用无状态会话时,实体未连接到会话。 但是,我认为有一种方法可以使用无状态会话来执行此查找。
如何使用无状态会话执行查找currentUser.BazSettings[baz]
?
无状态会话不支持延迟加载,因为它们是无状态的 :它们不跟踪与它们一起检索的实体的任何信息。
使其工作的唯一方法是急切加载集合。 但是,如果他们显然没有提供您需要的内容,为什么还要使用无状态会话?
您应该使用ISession而不是IStatelessSession,因为使用无状态会话执行的操作不会级联到关联的实例,并且无状态会话会忽略集合。
- 这三种在C#中创建新的List 的方法有何不同?
- 为什么Azure Mobile Apps的数据模型中存在字符串ID?
- 在.Net 4.5中检查Active Directory组成员身份
- C# – 列表 – 删除所有元素,但不删除前四个元素
- 建立与SQL Server的连接时发生与网络相关或特定于实例的错误。 找到指定的服务器/实例时出错
- 我可以使用流来插入或更新SQL Server(C#)中的行吗?
- 在Python中压缩并使用解压缩C#解压缩的最简单方法(反之亦然)
- 对inheritance表单的控件是否被锁定,是否可以撤消?
- C#COM Office Automation – RPC_E_SYS_CALL_FAILED