nhibernate没有机会更新?

时间:2011-03-11 08:35:36

标签: ajax nhibernate

我正在构建一个小型Web应用程序,用户可以在该应用程序中对项目进行评级。 在我的应用程序中,我使用的是nhibernate和asp.net mvc。

所有评级请求均由jquery(ajax / post)发送。 当用户对某个项目进行投票时,我会检查该项目是否先前已被投票。如果是,我将最后的投票值更新为收到的新投票值。如果没有,我只是在我的桌子上添加一个新的评级。

我注意到一些非常奇怪的事情。这很好用,但是当我点击几次真的很快就会搞砸了。我得到了多个评级,似乎nhibernate不会费心检查用户之前是否已投票,只是返回错误值。

这可能吗?我怎么才能看到引擎盖下的内容?

谢谢

2 个答案:

答案 0 :(得分:2)

您可能遇到并发问题。我假设您获得每次点击的线程和交易。单击非常快会导致并行事务无法看到其他人在做什么。

您遇到一个典型问题,即无法锁定数据库中的项目(新投票)。

解决方案是:

  • 使用lock以避免同时存储同一用户的多个投票。当您在同一数据库上有多个服务器(或AppDomains)时,这不起作用,因为锁定仅限于AppDomain。
  • 使用数据库中的表锁来锁定整个投票表,只有一个交易可以同时添加投票。

答案 1 :(得分:1)

您是否打开了NHibernate日志记录?

将以下内容添加到hibernate.config.xml文件中:

<property name="show_sql">true</property>

如果您正在运行单元测试,则可以在控制台或测试运行器输出中看到生成的sql。您还可以配置log4net以将NHibernate日志记录信息写入文件(请参阅https://web.archive.org/web/20110514164829/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/07/01/how-to-configure-log4net-for-use-with-nhibernate.aspx

最后,你是如何使用NHibernate的?您使用的是存储库模式吗?如果不了解代码,很难确定应用程序出了什么问题。