在nhibernate中使用延迟加载属性

时间:2011-03-23 12:29:37

标签: nhibernate

在我的产品实体中,我有以下属性。它正常工作并返回可用库存数量。查看我的探查器,我可以看到每次调用导致性能问题的产品实体时都会调用此语句。有没有办法我只能在需要时调用此属性。我添加了'lazy = true',但每次都会调用它。我正在使用nhibernate 2.如果可能,我宁愿不升级。

 <property name="StockAvailable" lazy="true"  type="Int32" formula="(SELECT Stock - isnull((select Sum(oi.Quantity) from OrderItems oi inner join Orders o on oi.OrderId = o.Id where (oi.OrderItemStatusId = 0 or oi.OrderItemStatusId = 1)  and o.OrderStatus = 3 and oi.ProductId = Id), 0))"/>

2 个答案:

答案 0 :(得分:2)

只有NHibernate 3及更高版本支持延迟属性,因此如果您希望该属性位于您的实体上,则需要升级。

另一种可能性是创建一个延迟加载的实体,并且只有这个单独的属性(你甚至可以将它映射到同一个表)。

我不知道这对您是否有问题,但您还应该考虑为使用group by的计算创建一个视图。如果您希望同时加载一个但不是多个实体同组,通常比子选择更好地执行mich,这很重要。

答案 1 :(得分:0)

http://ayende.com/Blog/archive/2010/01/27/nhibernate-new-feature-lazy-properties.aspx

查看日期,我认为自从2009年11月发布以来,我认为这不是2.1.2。