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 异步操作数据,大家有什么好的解决办法。
...全文
786 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bidisty 2016-07-13
  • 打赏
  • 举报
回复
异步操作的时候,你有用到等待点吗?如果没有改成同步操作。
正怒月神 版主 2016-07-12
  • 打赏
  • 举报
回复
貌似微信是会重复发送的。 我觉得楼主应该从代码上做判断。
  • 打赏
  • 举报
回复
微信本来就是这个机制,这可能是腾讯积20年开发经验而总结出来保证它自己的通讯能够抢占别人的通讯带宽、重复稳定的机制(类似地,有些人总是忽悠说腾讯还在使用以前使用的 udp,殊不知 udp 也是需要霸道地拥塞网络而不断重试的)。
  • 打赏
  • 举报
回复
微信给你推送信息时,如果你的网站5秒钟没有响应,它会重复推送。推2条信心不算是什么,可能3条、4条、5条。 不是你的ef 的问题。你肯定是没有仔细调试、测试就随便找了个原因。
yangzi0764 2016-07-12
  • 打赏
  • 举报
回复
确定不是提交了两次
圣殿骑士18 2016-07-12
  • 打赏
  • 举报
回复
关注。。。。。
Y2zz 2015-09-15
  • 打赏
  • 举报
回复
引用 1 楼 FoxDave 的回复:
但从现象上来看,是由于重启之后进行了两次操作,具体原因并没研究过 解决方案倒是有个简单的,插入之前对已经存在的ID不做插入
如果是guid,根本没办法判断,插入的id 肯定是new出来的
Justin-Liu 2014-10-15
  • 打赏
  • 举报
回复
但从现象上来看,是由于重启之后进行了两次操作,具体原因并没研究过 解决方案倒是有个简单的,插入之前对已经存在的ID不做插入

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧