报错信息:

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. NodeJs初学者经典入门解析
  2. setsockopt()使用方法(參数具体说明)
  3. NYOJ 108 士兵杀敌(一)
  4. ACL 2022 | 清华大学、DeepMind等指出现有小样本学习方法并不稳定有效,提出评价框架...
  5. lua实现多继承-方式2
  6. 响应式设计(Response Web Design)浅谈
  7. LA 4127 - The Sky is the Limit (离散化 扫描线 几何模板)
  8. 别人都说我老公的字写的不错,大家帮我看看这字行不?
  9. Apache服务安全加固及Apache优化
  10. 理解AOP思想(面向切面编程)
  11. Oracle Decode()函数和CASE语句的比较
  12. 多文件云传输系统框架
  13. C语言游戏开发——反弹球
  14. Android基本UI控件(一)
  15. 计算机物理学知识点,初中物理知识点计算公式表总结
  16. ps-半透明图片抠图
  17. echarts 世界地图 国家 中英文数据 nameMap
  18. Linux中部分命令英语全拼
  19. 行业首选|墨菲安全实力入选《开发安全产品及服务购买决策参考》
  20. 概念:ASP是一种语言么?

热门文章

  1. SpringBoot jap使用原生Sql的几种姿势
  2. 04_Linux软件包管理
  3. mysql tcmalloc_mysql安装tcmalloc
  4. 彻底禁用搜狗输入法的SGNews.exe
  5. 什么都能播放的媒体播放器——Potplayer
  6. dronekit 控制飞控 上/下/前/后/左/右 或是 上/下/东/西/南/北
  7. 模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)...
  8. 如何用ps(photoshop)把四角图片变成圆角图片?超级简单!
  9. phpcms 推荐位获取
  10. 棋牌平台短期内如何获得大量玩家