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

来源:互联网 发布:c#连接mysql命令 编辑:程序博客网 时间:2024/03/29 13:51

 假设一个这样的场景:

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