代码之家  ›  专栏  ›  技术社区  ›  JP.

nhibernate-记录搜索结果中出现的项目

  •  2
  • JP.  · 技术社区  · 15 年前

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

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Diego Mijelshon    15 年前

    有趣的问题!

    以下是一个可能的解决方案:

    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();
    

    当然,您可以使用条件、hql、sql、linq等进行搜索。

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