Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate 用于在oracle中使用NHiberante进行更新模拟_Nhibernate - Fatal编程技术网

Nhibernate 用于在oracle中使用NHiberante进行更新模拟

Nhibernate 用于在oracle中使用NHiberante进行更新模拟,nhibernate,Nhibernate,有人能告诉我如何使用NHibernate在oracle中实现更新吗?是否有任何预先定义的条款?如果没有,请告诉我如何实施。 基本上,您需要使用ISession.get(Of poco)(id,LockMode.Upgrade)获取poco 因此,这将发出一个SELECT。。。来自Poco,其中Id=?用于更新 您还可以使用LockMode.UpgradeNoWait调用,以获得更新NOWAITSQL语句的等效,感谢您的回答Hudler。我有一个巨大的查询,其中有rownum用于获取第一个结果。因

有人能告诉我如何使用NHibernate在oracle中实现更新吗?是否有任何预先定义的条款?如果没有,请告诉我如何实施。

基本上,您需要使用
ISession.get(Of poco)(id,LockMode.Upgrade)
获取poco

因此,这将发出一个
SELECT。。。来自Poco,其中Id=?用于更新


您还可以使用
LockMode.UpgradeNoWait
调用,以获得更新NOWAITSQL语句的等效

感谢您的回答Hudler。我有一个巨大的查询,其中有rownum用于获取第一个结果。因此,我希望在更新该结果之前锁定该结果。我不想为其他线程共享它。我没有任何Id用于比较。那么我可以在这个场景中使用上面的语法吗?上面提到的
id
是要锁定的记录的主键。你必须拥有它(NHibernate要求映射表总是有一个PK)。你可以先用你提到的大语句查询PK,然后用我的答案锁定记录。谢谢你的答案Hudler。但是我认为这种方法有一些问题。给出结果的方法是不同步的,所以有可能多个线程试图锁定同一行。在这种情况下可能会有问题,对吗?锁会有问题分两步进行,你是对的。但是一个人总是先拿到锁。如果第二个请求通过获取已经给定的锁而例外,那么它需要等待并在之后重新执行查询+锁请求。