首页 新闻 会员 周边 捐助

Entify Framework的同步问题

1
悬赏园豆:100 [待解决问题]

  假设有3个表 A B C,C的数据根据A和B中的字段计算所得, 如何能在EF中有用户在修改A B的时候锁定相应的row,在完成之前阻止更新C的用户读取A,B。

简单来说是2个过程:

======1========

var a = A.xxx; b = B.xxx;

....

C.xxx = Fun(a, b);

=======2========

var c = C.xxx;

.....

C.xxx = ..;

如果简单使用程序同步,则相当于任何访问A,B,C的动作都被序列。影响太大,rowlock是合理的方案,但是在EF中使用rowlock的存储过程好像不起作用。求sql大神赐教

王燕丽的主页 王燕丽 | 菜鸟二级 | 园豆:230
提问于:2011-04-08 13:34
< >
分享
所有回答(2)
0

1是否可以使用sql触发器达到你的需求

2或者在表中增加一列flg 当你要锁定记录时把flg设成1 ,这样程序在读数据时忽略掉flg=1的记录

死白的man | 园豆:2135 (老鸟四级) | 2011-04-08 13:48
msdn上建议的解决方案也是添加一个flag来标记是否lock,和一个time来设置lock过期时间避免意外没有重置flag的情况。但是始终觉得这不是一个很好的方式。
支持(0) 反对(0) 王燕丽 | 园豆:230 (菜鸟二级) | 2011-04-08 14:52
0

如果C表记录不是很多可以锁的方法解决,根据C表中记录的主键设置一个静态数组,再设置一个静态加锁列表,两个静态数组长度完全一致。每次修改A或B的记录前,必须先到静态数组中确定需要修改哪条C的记录,然后用LOCK方法锁住静态加锁列表中的对应记录,这样就能保证C表的每条记录同时只能有一个进程访问。注意所有对静态数组增删改查都需要加LOCK方法。

chenqin | 园豆:210 (菜鸟二级) | 2011-04-08 15:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册