Entity Framework(EF) async await 异步操作数据问题,高手都进来啊!!

问题描述

用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出来的

时间: 2024-09-15 10:51:39

Entity Framework(EF) async await 异步操作数据问题,高手都进来啊!!的相关文章

ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework

原文:ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework 文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html  上一节:ASP.NET MVC 5 入门教程 (4) View和ViewBag 下一节:ASP.NET MVC5 + EF6 入门教程 (6) View中的Razor使用 源码下载:点我下载 一.创建Model MVC中

Entity Framework简介

原文:Entity Framework简介 前言 很久很久之前就想来好好的学习一下EF,一直也是各种理由导致一直也没有好好的开始,现在下定决心了,不管怎样一定要把这先走一遍,并且把自己学到的相关EF的知识进行记录,以备后用,也望广大博友们一起来学习,探讨. Entity FrameWork概述 Entity Framework(EF)是一个开源的"对象/关系映射(ORM:Object Relational Mapping)"框架,使应用程序可以使用一种"纯"的对象模

Entity Framework学习中级篇1—EF支持复杂类型的实现

本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和LastName字段,那么对应的Customer实体类将会有FristName和LastName这两个属性.当我们想把FirstName和LastName合成一个名为CustomerName属性时,此时,如果要在EF中实现这个目的,那么我们就需要用到复杂类型. 目前,由于EF不能显示支持复杂类型,所以我们

async / await:更好的异步解决方案

在实际开发中总会遇到许多异步的问题,最常见的场景接口请求之后一定要等一段时间才能得到结果,如果遇到多个接口前后依赖,那么问题就变得复杂.大家都一直在尝试使用更好的方案来解决这些问题.最开始只能利用回调函数,后来开始有人使用Promise的思维来搞定.到ES6中开始支持原生的Promise,引入Generator函数. 直到ES7,有了async/await. 这是一个用同步的思维来解决异步问题的方案. 我想很多人可能还不太分得清同步与异步的区别.如果你已经彻底了解了事件循环,那么想必对异步的概念

Entity Framework 5.0系列之EF概览

概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种由ADO.NET驱动的ORM框架,使用Entity Framework开发人员可以不必考虑数据的基础数据表和列,在处理数据时能够以更高的抽象级别进行工作,并能够以相对传统开发编写更少的代码来创建和维护应用程序. 我们知道面向对象的编程与数据存储系统的交换提出了一个难题:类结构通常同关系数据表组织结构

async And await异步编程活用基础

原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 await 的理解有更深一层的理解. async 和 await 有你不知道的秘密,微软会告诉你吗? 我用我自己的例子,去一步步诠释这个技术,看下去,你绝对会有收获.(渐进描述方式,愿适应所有层次的程序员) 从零开始, 控制台 Hello World: 什么?开玩笑吧?拿异步做Hello World?? 下面这个例子,输出什么?猜猜? 1 static

JavaScript 异步方案 async/await 实例教程

构建一个应用程序总是会面对异步调用,不论是在 Web 前端界面,还是 Node.js 服务端都是如此, JavaScript 里面处理异步调用一直是非常恶心的一件事情.以前只能通过回调函数,后来渐渐又演化出来很多方案,最后 Promise 以简单.易用.兼容性好取胜,但是仍然有非常多的问题.其实 JavaScript 一直想在语言层面彻底解决这个问题,在 ES6 中就已经支持原生的 Promise ,还引入了 Generator 函数,终于在 ES7 中决定支持 async 和 await .

Entity Framework 实体框架的形成之旅--基类接口的统一和异步操作的实现(3)

在本系列的第一篇随笔<Entity Framework 实体框架的形成之旅--基于泛型的仓储模式的实体框架(1)>中介绍了Entity Framework 实体框架的一些基础知识,以及构建了一个简单的基于泛型的仓储模式的框架:在随笔<Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)>则持续优化这个仓储模式的实体框架,主要介绍业务逻辑层的构建,以及利用Unity和反射进行动态的对象注册.本篇主要介绍基类接口的统一和异步操作的实现等方

Entity Framework 6:专家版本

随着 Entity Framework 最新主版本 EF6 的推出,Microsoft 对象关系映射 (ORM) 工具达到了新的专业高度,与久负盛名的 .NET ORM 工具相比已不再是门 外汉. EF 已经完全成熟,正在超越以前广泛使用的工具. Entity Framework 已经度过了青涩期,它最初只是供数据库开发者使用的工 具,后来在 .NET 社区的敏捷开发者中间引起轰动. 它学会了如何摆脱应用程序 开发模式,转向了普通旧 CLR 对象 (POCO) 模型,支持以测试和域为中心的软件