【问题标题】:Handling concurrent writes with NHibernate使用 NHibernate 处理并发写入
【发布时间】:2016-10-06 05:36:21
【问题描述】:

我正在开发一个使用 Fluent NHibernate 编写的应用程序。这是一个 .Net MVC 应用程序,现在我遇到了以下问题:当两个用户执行相同的操作(即同时预订相同的约会)时,应用程序似乎没有足够快地进行检查以便查看时间段是否已被预订。

我在 NHibernate 方面的经验非常有限,我只能告诉你,此时 NHibernate Session 的事务隔离级别设置为 ReadCommitted;会话生命周期我假设它设置为 PerWebRequest(我还没有找到执行此操作的代码部分)。

我知道这是非常少的信息,但任何人都可以请至少指出我正确的方向吗?

【问题讨论】:

  • 您是否在尝试保存之前检查时间段上的现有预订?您可能需要手动执行此操作。
  • 没关系,我通过在会话中使用事务对象来做对了。我在开始执行检查之前调用“session.BeginTransaction(IsolationLevel.ReadCommited)”,最后我调用“session.Transaction.Commit()”

标签: nhibernate concurrency


【解决方案1】:

NHibernate 文档有一整章专门介绍 Optimistic concurrency control

简而言之,通过添加版本字段,NHibernate 可以自动检测代码是否试图修改在读取后被另一个会话更改的记录。之后,您可以重试、显示错误消息等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多