如何使用 NHibernate 锁定模式在更新之前锁定对象?

2024-01-31

首先让我说明一下我想要实现的目标。我有一张桌子,里面装满了工作。有一个 Web 服务,其方法允许更改作业数据,称为SaveJob。此方法检索作业及其所有数据,对新数据运行验证(这需要对其他表进行一些数据库查询),然后将其保存回数据库。有点慢。大约一秒钟。

偶尔会发生两种情况SaveJob同一工作上的调用会紧密相连,并且它们会互相冲突。目前,这是唯一的网络服务器,但我希望我的解决方案网络场兼容,因此即使我知道如何使用单例解决此问题,我还是希望由数据库处理锁。

问题是,当第二个 SaveJob 调用尝试读取已被另一个 SaveJob 调用更改的作业时,我是否可以使用 NHibernate 和 SQL Server 数据库锁来阻止第二个 SaveJob 调用?

我相信答案是肯定的,但我不太确定如何去做。我已阅读有关的文档ISession.Lock()我相信我需要的是使用NHibernate.LockMode.Upgrade

我的下一个问题是这个锁什么时候释放?

我假设它在事务提交时被释放,但我找不到任何明确说明这一点的文档。

但是,如果是这种情况,那么有没有办法让我打开另一个事务并运行一些查询,而不关闭我最初抓住这份工作时开始的事务?还是我have在一笔交易中完成这一切?


首先,我建议不要跨多个线程使用单个事务,因为 ISession 本身不是线程安全的。

当你使用LockMode.Upgrade在会议上,或在session.Get(),NHibernate会发出一个select with (rowlock)检索实体时的语句(详细信息可能取决于数据库类型和配置)。如果该对象之前被另一个线程检索过,则当前线程将等待,直到锁被释放或超时到期。当锁本身被释放时update语句执行于transaction.Commit(). Using LockMode.UpgradeNoWait提供类似的功能,只不过它不会等待,并且在获取锁定时会失败。

This 阿延德的帖子 http://ayende.com/blog/3946/nhibernate-mapping-concurrency还有一些关于 SQL NHibernate 发出的信息session.Lock().

您可以阅读有关不同类型的锁的信息NHibernate 文档第 11 章第 6 节 http://nhforge.org/doc/nh/en/index.html#transactions-locking.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 NHibernate 锁定模式在更新之前锁定对象? 的相关文章

  • 如何获取我的应用程序已创建的应用程序域的列表?

    我有一个服务应用程序 它在长时间运行的任务的使用过程中创建AppDomain 我一直通过将它们存储在具有唯一 ID 的哈希表中来跟踪它们 任务完成后 服务应用程序会卸载分配给该任务的 AppDomain 然后将其从 appdomain 哈希
  • 在 Windows 窗体应用程序 (.net) 中单击图像的 X/Y 坐标

    有没有办法知道在 FORMS 应用程序中单击了哪些 x y 坐标 看看鼠标事件参数 http msdn microsoft com en us library system windows input mouseeventargs memb
  • 转换BitmapImage后内存未释放

    我遇到以下 C 测试 代码的问题 public static void TestBitmap2ByteArray BitmapImage bitmap JpegBitmapEncoder encoder new JpegBitmapEnco
  • int -> int list 与类型 int -> IEnumerable<'a> 不兼容

    Given open System Linq 这是一个可以接受的表达方式 2 3 4 SelectMany fun n gt 1 n 但这不是 2 3 4 SelectMany fun n gt 1 n 错误消息显示 int gt int
  • 为什么自定义类型变量不保存值MVC

    我正在尝试使用 MVC 5 构建一个网站 我有一个包含 3 个变量的控制器类 public class WorkerController Controller public ViewModel viewModel new ViewModel
  • 即使在 GC Collect 和 WaitForPendingFinalizers 之后,窗口对象在关闭后也未释放?

    这是一个简单的测试应用程序 可帮助了解 WPF 内存使用情况 我想了解的关键是为什么MainWindow即使在关闭并等待 GC 完成之后 仍然被引用并且它的内存没有被释放 参见下面的代码清单 文本 MainWindow Finalizer
  • 并行应用程序的可变与不可变[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我正在编写的应用程序中 我需要编写大量基本类型 这些类型很可能是不可变的 但我想知道并行应用程序中可变类型与不可变类型的比较如何 您可以对可变
  • 分层架构中的异常处理

    我们正在分层设计中重构 当然还有重新设计 我们的服务 我们有服务操作层 BLL 网络抽象层 gt 处理网络代理 数据抽象层 但我们对我们的异常处理策略有点困惑 我们不想向外界透露太多 BLL 的信息 从其他层到bll就可以了 我们不想让 t
  • 如何动态加载包含非托管代码的原始程序集?(绕过“无法验证的代码失败策略检查”异常)

    我将举一个使用的例子系统 Data SQLite DLL http sqlite phxsoftware com 这是一个包含非托管代码的混合程序集 如果我执行这个 var assembly Assembly LoadFrom System
  • 在 DataGridView 中隐藏行非常慢

    我在 Winforms 应用程序中有一个 DataGridView 大约有 1000 行 未绑定 和 50 列 隐藏一列需要整整 2 秒 当我想隐藏大约一半的行时 这就成为一个问题 private void ShowRows string
  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所
  • Sitecore - 隐藏功能区中的按钮

    我为特定内容项创建了上下文功能区 我有两个按钮 可以将项目 升级 或 降级 到某一类别 该部分只能有一个 是否可以根据某种隐藏代码中的内容状态隐藏其中一个按钮 我了解如何链接到 Click 事件 但我想知道是否有某种加载事件可供自定义功能区
  • 更换 I 过滤器

    我目前正在使用 IFilters 从各种文件 word excel tiff pdf 等 中提取文本 据我所知 IFilter 已在 Windows 8 中停止使用 是否有人对如何在不安装本机应用程序的情况下提取文本有任何建议 如果有什么用
  • 如何在 VS2017/2015 中打开 .xproj 文件

    我有一个带有扩展名的 NET core 项目 xproj 当我在VS 2017中打开项目时 项目文件 xproj migrated to csproj 如何打开 xproj 文件 Visual Studio 2017 2015 我需要安装任
  • 如何获取Winforms窗体标题栏高度的大小?

    因此 如果它是工具窗口或可最小化的表单 我希望能够以编程方式获取其高度 这可能吗 如果是这样怎么办 您可以使用以下方法确定工具窗口和普通表单的标题栏高度 Rectangle screenRectangle this RectangleToS
  • CompileAssemblyFromDom 抛出访问被拒绝异常

    代码 using var codeProvider new CSharpCodeProvider var compilerParameter new CompilerParameters assemblies assemblyName fa
  • 当我使用 Image.FromFile() 时 FileNotFound

    我在这种情况下使用 Image FromFile string 方法 using System using System Collections Generic using System ComponentModel using Syste
  • .NET“默认行终止符”?

    有什么方法可以弄清楚 NET 使用什么作为其 默认行终止符 例如 StringBuilder AppendLine String 的文档表示 附加指定字符串的副本 后跟默认行终止符 NET 中的几个与文本相关的类引用相同的概念 有什么方法可
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub

随机推荐

  • PHP + SQL Server - 如何设置连接字符集?

    我正在尝试通过 php 将一些数据存储在 SQL Server 数据库中 问题是特殊字符未正确转换 我的应用程序的字符集是 iso 8859 1 服务器使用的是windows 1252 在插入之前手动转换数据没有帮助 似乎有一些 转换正在进
  • mpmath 矩阵求逆的替代方案或加速方案

    我正在用 python 编写一些代码 需要频繁地反转大方阵 100 200 行 列 我已经达到了机器精度的极限 所以开始尝试使用mpmath进行任意精度矩阵求逆 但它非常慢 即使使用gmpy 以精度 30 十进制 反转大小为 20 30 6
  • 如何使用 javascript 添加 svg?

    我正在使用此代码将 svg 插入到 div 标签中 var container document getElementById div id var svg document createElement svg svg setAttribu
  • 使用 Java 的 LinkedIn API 身份验证

    我是 Linked In API 认证新手 我去看了LinkedIn提供的API文档 它有 RUBY PYTHON 和 PHP 的示例 但我被要求使用 Java 实现同样的目标 我需要阅读链接中用户的个人资料 任何人都可以建议我任何链接或示
  • 机器 ID/主机名如何映射/解映射到对象 ID 中的 3 个字节?

    机器 ID 主机名如何映射 解映射到对象 ID 中的 3 个字节 我应该在哪里寻找Linux中的机器ID domU 12 31 39 13 02 56 看起来很奇怪 我不确定它是否正确 该函数不会从 ObjectID 获取您的主机名 它会向
  • Eigen::Ref<> 类的正确用法

    Eigen 引入了 Ref 类 以便在不需要编写模板函数时以 Eigen 对象作为参数编写函数 而无需使用不必要的临时变量 人们可以读到这一点here http eigen tuxfamily org dox TopicFunctionTa
  • 如何使用 htaccess 转发查询字符串?

    目前 我正在使用它来重写 URL RewriteEngine on RewriteRule page php name 1 NC So mysite com home被重写为mysite com page php name home 我怎样
  • Express:POST请求后Req.body未定义

    我在 app router 之前使用了express bodyParser 并且标题似乎是正确的 但我仍然在 req body 上未定义 var app express app use express bodyParser app use
  • ADO.NET 与 ADO.NET 实体框架

    ADO NET 和 ADO NET 实体框架哪个更快 没有什么比 ADO NET 数据读取器更快了 实体框架也在 地下室 使用了它 然而 实体框架可以帮助您从数据库映射到对象 对于 ADO NET 您必须自己完成此操作 这取决于你如何编程它
  • Dexie:如何添加到嵌套对象中的数组

    我正在使用 Dexie IndexedDB 包装器 并且尝试将一个对象添加到嵌套对象内的现有数组中 结构如下所示 Name John age 33 tags skill first NET second JAVA third special
  • Base64 编码数据有哪些缺点?

    在过去两年左右的时间里 我对多种类型的网络数据进行了 Base64 编码 图像 otf文件 文本等 它很实用 因为它作为一种临时的资产整合方法 数据直接嵌入CSS或HTML中 不必担心死链接 但是使用这种方法有什么缺点吗 Base64 编码
  • 使用sqlite、flutter应用程序导入数据库

    我的主要目标是使用 sqlite sqlflite 插件 将数据库导入到 flutter 应用程序中 而不必将所有创建表硬编码到应用程序代码中 我希望信息能够在本地访问手机 在飞行模式下从手机访问数据 这就是我使用 sqlite 的原因 我
  • Javascript - ReactJS - 以 ReadableStream 作为源显示图像

    我有 PNG 图像作为 ReadableStream 我需要使用此 ReadableStream 作为源显示 html 元素 img 我应该将其转换为某种东西吗 或者我该怎么做 谢谢你的答案 来自谷歌的docs https develope
  • 在另一个工厂内使用一个工厂 AngularJS

    我有一个模块 angular module myModule 然后是工厂 angular module myModule factory factory1 function some var s and functions 然后是另一家工厂
  • VB 中 .NET MVC3 Razor 视图中的命名空间引用?

    如何使用 Razor 视图引擎引用 NET MVC3 中的命名空间 据我所知 这可以在 C 中完成 using Namespace 然而在VB中这似乎不起作用 Imports Namespace 我说的是 vbhtml 文件内部 您正在使用
  • 二次读取法

    我必须为二次类编写一个读取方法 其中二次以 ax 2 bx c 的形式输入 该类的描述是这样的 添加一个读取方法 要求用户提供标准格式的方程并正确设置三个实例变量 因此 如果用户输入 3x 2 x 则将实例变量设置为 3 1 和 0 这将需
  • 如何创建字节数组并用随机数据填充它[重复]

    这个问题在这里已经有答案了 我想根据给定大小创建一个填充随机数据的字节数组 我该怎么做 我的方法的签名如下所示 private byte GetByteArray int sizeInKb 这是我尝试过的 private byte GetB
  • iOS 与 IPv6 和 Azure 的问题

    我们的 Xamarin iOS 应用程序之一被拒绝 因为 Service URI 似乎无法从 IPv6 网络获得 从 2016 年 6 月 1 日开始 Apple 希望所有 iOS 应用程序在纯 IPv6 网络中完全兼容 Microsoft
  • 快速检索 WKInterfaceLabel 的文本

    如何在 WatchKit 中获取 Swift 或 Objective C 中的标签文本 该类不是 UILabel 而是 WKInterfaceLabel 我也尝试过搜索苹果的类库 https developer apple com libr
  • 如何使用 NHibernate 锁定模式在更新之前锁定对象?

    首先让我说明一下我想要实现的目标 我有一张桌子 里面装满了工作 有一个 Web 服务 其方法允许更改作业数据 称为SaveJob 此方法检索作业及其所有数据 对新数据运行验证 这需要对其他表进行一些数据库查询 然后将其保存回数据库 有点慢