Entity Framework(EF) async await 异步操作数据问题,高手都进来啊!!
惑豁猿 2014-10-15 12:46:40 用EF 6快半年了,但是最近发现一个问题,大家进来看看。
在本地测试是没有问题的,但是发现到服务器上,在某一场景下会有问题。
什么场景呢,大家都知道,.net web应用程序在第一次被访问的时候,会有一点点慢,访问过后便会快很多,当我们重启了服务器或重启了IIS之后,此是我们的Web页面还没有人访问过;
此时,假如我们第一访问的是一个添加数据的操作(往往一般我们都是先打开页面,做的是查询,然后才会有添加或更新),但是有一种情况,比如说我们事先打开 了网站的某个添加功能页面,此时我们重启一下IIS,然后我们提交已填写的表单,如果我们后端用的是ef的异步方法,怎么会出现问题呢,提交后你会发现,数据库里会出现相同的两条数据,也就是提交了两条相同的数据进入数据库;
而如果web程序被访问过后,再来进入数据库操作,就是正常的,只会有一条数据入库。
大家能帮分析分析原因么。
我是在两个Web应用中都发现了这个问题
第一个应用:就是开发微信公众号,当有用户关注了我的公众号,我便可以获取到该用户的昵称、性别等信息,然后我用异步方法保存到数据库,当某一个时刻我发现了新版本,或是重启了IIS,或是重启了服务器之后,我的应该程序还没有人来访问,此当有人关注了我的公众号,微信便会把信息推送过来,此时我获取到用户的信息之后,存储到数据库中,便会出现两条相同的数据。
第二个应该:我的另一个Web应用项目中有签到这一功能,有一天我打开手机,打开了签到页面,但是当时同事重启了IIS,也是一个巧合,当我填写了内容的时候,iis重启完成,我点提交,此时数据库里也是出现了两条相同的数据,两条数据的添加时间都相同,就只是毫秒数有所不同。
我用的都是ef6 异步操作数据,大家有什么好的解决办法。