Dynamics CRM小窍门——数据读写锁

 假设一个这样的场景:

1)新建商机的插件实例A读了一个自定义实体数据C的值100,将会通过计算把这个值更改为200。

2)新建商机的插件实例B在A完成计算前,读了C的值为100。

3)   A把200的值保存下来后,B也得出200的值并保存。


Dynamics CRM的Plugin(插件)是运行在一个SQL Transaction里面的。 所以我们能利用这个特性,在插件里面做出简单的读写锁,而不用额外访问SQL server运行query。 

这对于做自动计数插件是尤其有效。我们只需要在读取前先做一次更新,就能对数据做出一个读写锁,不会让其他线程读到脏数据。

具体如下:

1)新建商机的插件实例A把商机的GUID更新到C里面的一个字段,然后通过Retrieve再取得C并读C的值100,将会通过计算把这个值更改为200。

2)新建商机的插件实例B在A完成计算前,因为A对C的锁,B在计算完成前不能读C的值,B睡眠

3)A完成对C的更新,放开锁,B读取C的值200, 通过计算得到400并保存到C


虽然这样的插件能保证数据的完整一致,但肯定对性能有影响,对C的操作越频繁影响越大。请根据实际情况来采用。


谢谢阅读!


Jake Zhong

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值