Nhibernate 用于在oracle中使用NHiberante进行更新模拟
有人能告诉我如何使用NHibernate在oracle中实现更新吗?是否有任何预先定义的条款?如果没有,请告诉我如何实施。 基本上,您需要使用Nhibernate 用于在oracle中使用NHiberante进行更新模拟,nhibernate,Nhibernate,有人能告诉我如何使用NHibernate在oracle中实现更新吗?是否有任何预先定义的条款?如果没有,请告诉我如何实施。 基本上,您需要使用ISession.get(Of poco)(id,LockMode.Upgrade)获取poco 因此,这将发出一个SELECT。。。来自Poco,其中Id=?用于更新 您还可以使用LockMode.UpgradeNoWait调用,以获得更新NOWAITSQL语句的等效,感谢您的回答Hudler。我有一个巨大的查询,其中有rownum用于获取第一个结果。因
ISession.get(Of poco)(id,LockMode.Upgrade)
获取poco
因此,这将发出一个SELECT。。。来自Poco,其中Id=?用于更新
您还可以使用
LockMode.UpgradeNoWait
调用,以获得更新NOWAITSQL语句的等效,感谢您的回答Hudler。我有一个巨大的查询,其中有rownum用于获取第一个结果。因此,我希望在更新该结果之前锁定该结果。我不想为其他线程共享它。我没有任何Id用于比较。那么我可以在这个场景中使用上面的语法吗?上面提到的id
是要锁定的记录的主键。你必须拥有它(NHibernate要求映射表总是有一个PK)。你可以先用你提到的大语句查询PK,然后用我的答案锁定记录。谢谢你的答案Hudler。但是我认为这种方法有一些问题。给出结果的方法是不同步的,所以有可能多个线程试图锁定同一行。在这种情况下可能会有问题,对吗?锁会有问题分两步进行,你是对的。但是一个人总是先拿到锁。如果第二个请求通过获取已经给定的锁而例外,那么它需要等待并在之后重新执行查询+锁请求。