问题描述
用EF6快半年了,但是最近发现一个问题,大家进来看看。在本地测试是没有问题的,但是发现到服务器上,在某一场景下会有问题。什么场景呢,大家都知道,.netweb应用程序在第一次被访问的时候,会有一点点慢,访问过后便会快很多,当我们重启了服务器或重启了IIS之后,此是我们的Web页面还没有人访问过;此时,假如我们第一访问的是一个添加数据的操作(往往一般我们都是先打开页面,做的是查询,然后才会有添加或更新),但是有一种情况,比如说我们事先打开了网站的某个添加功能页面,此时我们重启一下IIS,然后我们提交已填写的表单,如果我们后端用的是ef的异步方法,怎么会出现问题呢,提交后你会发现,数据库里会出现相同的两条数据,也就是提交了两条相同的数据进入数据库;而如果web程序被访问过后,再来进入数据库操作,就是正常的,只会有一条数据入库。大家能帮分析分析原因么。我是在两个Web应用中都发现了这个问题第一个应用:就是开发微信公众号,当有用户关注了我的公众号,我便可以获取到该用户的昵称、性别等信息,然后我用异步方法保存到数据库,当某一个时刻我发现了新版本,或是重启了IIS,或是重启了服务器之后,我的应该程序还没有人来访问,此当有人关注了我的公众号,微信便会把信息推送过来,此时我获取到用户的信息之后,存储到数据库中,便会出现两条相同的数据。第二个应该:我的另一个Web应用项目中有签到这一功能,有一天我打开手机,打开了签到页面,但是当时同事重启了IIS,也是一个巧合,当我填写了内容的时候,iis重启完成,我点提交,此时数据库里也是出现了两条相同的数据,两条数据的添加时间都相同,就只是毫秒数有所不同。我用的都是ef6异步操作数据,大家有什么好的解决办法。
解决方案
本帖最后由 anech 于 2014-10-15 13:00:17 编辑
解决方案二:
但从现象上来看,是由于重启之后进行了两次操作,具体原因并没研究过解决方案倒是有个简单的,插入之前对已经存在的ID不做插入
解决方案三:
引用1楼FoxDave的回复:
但从现象上来看,是由于重启之后进行了两次操作,具体原因并没研究过解决方案倒是有个简单的,插入之前对已经存在的ID不做插入
如果是guid,根本没办法判断,插入的id肯定是new出来的