NHibernate - 记录搜索结果中显示的项目

时间:2010-04-26 17:35:48

标签: c# nhibernate orm

我在MVC 2.0应用程序中使用NHibernate。基本上我想跟踪每个产品在搜索结果中显示的次数。例如,当某人搜索小部件时,名为WidgetA的产品将显示在搜索结果的第一页中。此时,我将在数据库中增加一个字段,以反映它是搜索结果的一部分。

虽然这很简单,但我担心插入本身会大大降低搜索结果的速度。我想将我的语句一起批处理,但似乎将我的插入与我的选择相结合可能会适得其反。有没有人试图在NHibernate中实现这一点,如果有的话,是否有完成这种操作的标准模式?

1 个答案:

答案 0 :(得分:1)

有趣的问题!

这是一个可能的解决方案:

var searchResults = session.CreateCriteria<Product>()
    //your query parameters here
    .List<Product>();
session.CreateQuery(@"update Product set SearchCount = SearchCount + 1
                      where Id in (:productIds)")
       .SetParameterList("productIds", searchResults.Select(p => p.Id).ToList())
       .ExecuteUpdate();

当然,您可以使用Criteria,HQL,SQL,Linq等进行搜索。

更新查询是所有对象的单次往返,因此性能影响应该是最小的。