在 Nhibernate 中加载与获取
Posted
技术标签:
【中文标题】在 Nhibernate 中加载与获取【英文标题】:Load vs Get in Nhibernate 【发布时间】:2010-04-04 17:33:33 【问题描述】:我的 Web 应用程序中的母版页使用 Get
进行身份验证并加载用户实体。
在此之后,每当用户控件或任何其他类需要用户对象时,我都会执行Load
。
通常nhibernate is supposed to load the object from cache or return the persistent loaded object 每当Load
被调用。但这不是我的 Web 应用程序显示的行为。 NHprof 总是在调用 Load 时显示 sql。如何验证Load
的正确行为?
我使用 S#arp 架构 框架。
【问题讨论】:
【参考方案1】:实际上,对未标记为惰性的实体调用 Load 会立即加载。那是因为非惰性实体永远不会被代理。在这种情况下,它的作用与 Get 相同。
【讨论】:
【参考方案2】:如果您使用 Get,则会对数据库进行命中。 如果您使用加载,则不会对数据库产生任何影响,但对象(在您的情况下为用户)是使用“延迟加载”创建的。因此,当您检查一个属性时,它知道您需要数据,因此它会通过查询访问数据库以获取数据。
如果你想从缓存中获取一个对象,你需要考虑 2 个选项。 一级缓存,是在一个会话中使用的缓存。因此,当您关闭会话或在不同的会话中加载相同的对象时,您会获得额外的命中。 二级缓存适用于所有会话。如果一个会话获取对象,则另一个会话从缓存中获取它。
所以你想要的可能是二级缓存。
【讨论】:
以上是关于在 Nhibernate 中加载与获取的主要内容,如果未能解决你的问题,请参考以下文章