NHibernate Cookbook 学习笔记 5

本文介绍了如何在NHibernate中处理版本和并发问题,包括乐观并发控制和悲观并发控制的实现。此外,还详细讲解了使用Fluent NHibernate进行手动映射的过程,以及如何建立双向一对多的关系,并提供了相应的代码示例。
摘要由CSDN通过智能技术生成

处理版本和并发问题:

1.修改entity的基本类型,添加一个版本字段

protected virtualint Version { get; set; }

2.在product映射文件中,添加version元素

<natural-id mutable="true">

  <property name="Name"not-null="true" />

</natural-id>

<version name="Version" />

<property name="Description" />

<property name="UnitPrice" not-null="true" />

 

3.ActorRole的映射文件也添加一个版本元素:

<id name="Id">

  <generator class="guid.comb"/>

</id>

<version name="Version" />

<property name="Actor" not-null="true" />

<property name="Role" not-null="true" />

4.考虑到这种情况,2个用户同时从数据库中取得数据,第一个修改了提交,过了一会第2个修改提交,就覆盖了第一个的修改。处理这种并发的问题有2种方式:

 

乐观并发:第2 个用户提交,会检查这个version,不对就会抛出异常。version这个版本的变化,会在每次跟新数据的时候自动增加

参见这条sql语句:

UPDATE Product

SET    Version = 2 /* @p0 */,

       Name = 'Junk' /* @p1 */,

       Description = 'Cool' /* @p2 */,

       UnitPrice = 100 /* @p3 */

WHERE  Id = '764de11e-1fd0-491e-8158-9db8015f9be5'/* @p4 */

       AND Version = 1 /* @p5 */

悲观并发:锁机制,一旦一个用户取得数据,获得一个独占锁,这个要通过NH的事务 session.Lock方法来做

 

其他的一些乐观并发处理:

<class name="Product" dynamic-update="true" optimistic-lock="dirty">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值