我的 Web 应用程序中的母版页进行身份验证并使用Get
.
在此之后,每当用户控件或任何其他类需要用户对象时,我都会执行Load
.
通常nhibernate 应该从缓存中加载对象或在调用时返回持久加载的对象Load
。但这不是我的 Web 应用程序显示的行为。NHprof总是在调用 Load 时显示 sql。如何验证 的正确行为Load
?
我使用S#arp 架构框架。
我的 Web 应用程序中的母版页进行身份验证并使用Get
.
在此之后,每当用户控件或任何其他类需要用户对象时,我都会执行Load
.
通常nhibernate 应该从缓存中加载对象或在调用时返回持久加载的对象Load
。但这不是我的 Web 应用程序显示的行为。NHprof总是在调用 Load 时显示 sql。如何验证 的正确行为Load
?
我使用S#arp 架构框架。
实际上,对未标记为惰性的实体调用 Load 会立即加载。那是因为非惰性实体永远不会被代理。在这种情况下,它的作用与 Get 相同。
如果您使用 Get,则会对数据库进行命中。如果您使用加载,则不会对数据库产生任何影响,但对象(在您的情况下为用户)是使用“延迟加载”创建的。因此,当您检查属性时,它知道您需要数据,因此它会通过查询访问数据库以获取数据。
如果要从缓存中获取对象,则需要考虑 2 个选项。一级缓存,是在一个会话中使用的缓存。因此,当您关闭会话或在不同的会话中加载相同的对象时,您会获得额外的命中。二级缓存适用于所有会话。如果一个会话获取对象,则另一个会话从缓存中获取它。
所以你想要的可能是二级缓存。