我在MVC 2.0应用程序中使用NHibernate。基本上我想跟踪每个产品在搜索结果中显示的次数。例如,当某人搜索小部件时,名为WidgetA的产品将显示在搜索结果的第一页中。此时,我将在数据库中增加一个字段,以反映它是搜索结果的一部分。
虽然这很简单,但我担心插入本身会大大降低搜索结果的速度。我想将我的语句一起批处理,但似乎将我的插入与我的选择相结合可能会适得其反。有没有人试图在NHibernate中实现这一点,如果有的话,是否有完成这种操作的标准模式?
答案 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等进行搜索。
更新查询是所有对象的单次往返,因此性能影响应该是最小的。