首页 新闻 会员 周边

entiry framework 里如何作到线程安全或是一次只能一个线程访问数据库?

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

开发框架 EF+asp.net MVc

我开发的交易平台里分手机端和PC端,交易部分代码从pc版复制过去,他们是分别写在两个控制器里。

现在的问题是,同一秒钟PC端和手机端进行同一个操作,就会出现数据不对或是重复插入。

比如在卖的商品库存只2个,A用pc端下单购买2个,B下单购买1个。 结果就出现两个订单,但实际上库存已经没有,B不应该下单成功。

我在手机端和pc端都使用了事物,但还是出这个问题。

这种情况,我要怎么处理?并发的时候,如何保证数据的正确?

wunaigong的主页 wunaigong | 初学一级 | 园豆:4
提问于:2017-09-01 15:05
< >
分享
所有回答(4)
0

百度:ef并发处理,

ef的并发是乐观锁.要加行版本字段

吴瑞祥 | 园豆:29449 (高人七级) | 2017-09-01 15:20

这个适合于Database First 吗?

我看要在生成的实体里再加上 [Timestamp] 。

我数据库更新了,不就没了吗?

 

支持(0) 反对(0) wunaigong | 园豆:4 (初学一级) | 2017-09-01 15:22

@wunaigong: 没有适用不适用.不能用也得用.

因为ef的并发管理只有这一个.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-09-01 16:02
0

实例方法加锁没用。

也就是说客户端每次请求,都会生成新的实例。

封装成静态方法,加锁。

写代码的小2B | 园豆:4371 (老鸟四级) | 2017-09-01 16:27
0

要么用锁;要么字段有个标志,sql里面有判断就行了。

一般并发下选择后者。

花飘水流兮 | 园豆:13560 (专家六级) | 2017-09-04 21:51
0

可以使用乐观锁,update num,=1 where num>0

chester·chen | 园豆:507 (小虾三级) | 2018-11-23 10:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册