报错信息:

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded.

存储更新,插入或删除语句影响了意外的行数(0)。自加载实体以来,实体可能已被修改或删除。

原因:

线程1中被标记为删除的元素,在执行SaveChanges更新数据库的时候发现在数据库里已经不存在了(被另一个线程已经删除并物理更新了),这时候就会报错;

代码举例:

执行SaveStudent()方法时,会报错,前提:Student中要有数据(没有数据当然不存在这个问题。。。)

private static int mark = 0;private static void SaveStudent(){Task.Factory.StartNew(() =>{SaveStudent2();});using (DBContext dbContext = new DBContext()){var ratios = dbContext.Student.ToList();// 将所有元素标记为删除状态,但不更新数据库,dbContext.Student.RemoveRange(ratios);// 通知方法SaveStudent2执行mark = 1;// 等待方法SaveStudent2执行完毕,SaveStudent2方法会将要删除的元素删除并更新数据库SpinWait.SpinUntil(() => mark == 2);/* 此处会报错,因为当前方法将ratios中的元素标记为删除状态,但是要SaveChanges的时候,* 发现数据库里已经没有这些元素了(因为在SaveStudent2方法中已经删除掉了)。* 报错信息:* Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded.*/dbContext.SaveChanges();}}private static void SaveStudent2(){// 等到方法SaveStudent中已经将所有元素标记为删除状态SpinWait.SpinUntil(() => mark == 1);using (DBContext dbContext = new DBContext()){var ratios = dbContext.Student.ToList();dbContext.Student.RemoveRange(ratios);dbContext.SaveChanges();// 删除所有元素后,更新数据库,然后通知SaveStudent继续执行mark = 2;}}

关于EF多线程更新数据的一个报错相关推荐

  1. django mysql save_python,django,向mysql更新数据时save()报错不能用

    用户提问 求大神帮忙,models.py中有个Student类,当我用s = Student(...)创建对象,然后s.save()可以往mysql中插入记录,但是当我用 s.name = 'aaa' ...

  2. 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区...

    开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对的. 半小时前,我的 XRecyclerView 群里面,一位群友私聊我,问题是: 为什么我的子线程更新了 UI 没报错? 我 ...

  3. Excel合并数据查找函数VLOOKUP()一直显示最后一行数据或者一直报错的解决方法

    Excel合并数据查找函数VLOOKUP()一直显示最后一行数据或者一直报错的解决方法 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地 ...

  4. android 开发问题集(一):SDK更新后 运行程序报错Location of the Android SDK has not been setup in the preferences

    SDK更新后 运行程序报错Location of the Android SDK has not been setup in the preferences 问题描述:android跟新后报错loca ...

  5. 调用http时因为js问题遇到的一个报错

    调用http时因为js问题遇到的一个报错 如果在使用其他语言调用http进行读取页面数据.获取页面源代码.接口调试等等时遇到了以下的报错: <html> <body> < ...

  6. vue-cli中mock本地json数据踩雷:报错404 (GET http://localhost:8080/goods 404 (Not Found) )

    标题vue-cli中mock本地json数据踩雷:报错404 运用vue的脚手架进行了项目的搭建,想要通过json文件模拟后台传输数据,结果一直报错:404,经过不断的查找资料和调试终于找到问题的所在 ...

  7. Excel单元格数据超过32767报错问题处理

    Excel单元格数据超过32767报错问题处理 EasyExcel描述 EasyExcel是一款基于Java的简单.省内存的读写Excel的开源项目.官网.使用起来确实比较方便,但是对于一些比较复杂的 ...

  8. pip 更新命令使用和报错解决

    pip 更新命令使用和报错解决 有时候在运行pip 命令要进入更新的提示信息,这个时候就要对pip的命令进行一个更新,更新后的pip命令就可以正常对模块包进行下载了 这个时候可以用下面的命令进行一个更 ...

  9. EasyExcel单元格数据超过32767报错问题处理

    EasyExcel单元格数据超过32767报错问题处理 EasyExcel描述 EasyExcel是一款基于Java的简单.省内存的读写Excel的开源项目.官网.使用起来确实比较方便,但是对于一些比 ...

最新文章

  1. 面试Android实习生
  2. 解决用img src=%# Eval(ShowPhoto)%动态绑定图片,发布到IIS上无法显示的问题
  3. 渗透测试入门16之渗透测试基本知识
  4. oracle11g更改字符集AL32UTF8为ZHS16GBK及创建用户、删除用户
  5. Linux 中 Iptables 规则定义
  6. (经典)详解WINDOWS映像劫持技术
  7. python画双坐标图_Python画双坐标曲线图
  8. python中re的group方法详解(来自官方文档的权威解释)
  9. 机器学习算法之GMM模型
  10. js 模拟表单post提交
  11. 如何防止mysql删库_数据库如何防止程序员删库到跑路
  12. mysql高性能学习笔记03_【MySQL】《高性能MySQL》 学习笔记,第三章,服务器性能剖析...
  13. 优酷中转码是什么意思
  14. 计算机体系结构 ---- flynn 分类
  15. VR技术给我们的生活带来哪些影响
  16. window7电脑调屏幕亮度的方法
  17. js绘制菱形(空心和实心)
  18. linux打开文件乱码
  19. Motivated Word(4)
  20. SAP BAdI 深度解读

热门文章

  1. WPF——ComboBox绑定XmlDataProvider数据
  2. S5PV210之UBOOT-2011.06启动过程解析-基于u-boot for tiny210 ver3.1 (by liukun321咕唧咕唧)
  3. c# 小票打印机打条形码_C#打印条码的几种方式
  4. BurpSuit官方实验室之SQL注入
  5. jq weui 日期年月日时分秒得设置(二个弹窗)
  6. python梦幻西游鼠标偏移_【按键盒子】梦幻西游解决鼠标漂移问题
  7. xps in html5,好看的轻薄笔记本,戴尔XPS 13 2in-1评测
  8. 第二篇:java调用公共数据接口:上海市车辆基本信息查询(java调用soap接口)
  9. 佳博Gainscha GP-58TL 打印机驱动
  10. matlab中strel是什么意思,matlab strel(1)