关于EF多线程更新数据的一个报错
报错信息:
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多线程更新数据的一个报错相关推荐
- django mysql save_python,django,向mysql更新数据时save()报错不能用
用户提问 求大神帮忙,models.py中有个Student类,当我用s = Student(...)创建对象,然后s.save()可以往mysql中插入记录,但是当我用 s.name = 'aaa' ...
- 为什么我的子线程更新了 UI 没报错?借此,纠正一些Android 程序员的一个知识误区...
开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对的. 半小时前,我的 XRecyclerView 群里面,一位群友私聊我,问题是: 为什么我的子线程更新了 UI 没报错? 我 ...
- Excel合并数据查找函数VLOOKUP()一直显示最后一行数据或者一直报错的解决方法
Excel合并数据查找函数VLOOKUP()一直显示最后一行数据或者一直报错的解决方法 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地 ...
- 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 ...
- 调用http时因为js问题遇到的一个报错
调用http时因为js问题遇到的一个报错 如果在使用其他语言调用http进行读取页面数据.获取页面源代码.接口调试等等时遇到了以下的报错: <html> <body> < ...
- vue-cli中mock本地json数据踩雷:报错404 (GET http://localhost:8080/goods 404 (Not Found) )
标题vue-cli中mock本地json数据踩雷:报错404 运用vue的脚手架进行了项目的搭建,想要通过json文件模拟后台传输数据,结果一直报错:404,经过不断的查找资料和调试终于找到问题的所在 ...
- Excel单元格数据超过32767报错问题处理
Excel单元格数据超过32767报错问题处理 EasyExcel描述 EasyExcel是一款基于Java的简单.省内存的读写Excel的开源项目.官网.使用起来确实比较方便,但是对于一些比较复杂的 ...
- pip 更新命令使用和报错解决
pip 更新命令使用和报错解决 有时候在运行pip 命令要进入更新的提示信息,这个时候就要对pip的命令进行一个更新,更新后的pip命令就可以正常对模块包进行下载了 这个时候可以用下面的命令进行一个更 ...
- EasyExcel单元格数据超过32767报错问题处理
EasyExcel单元格数据超过32767报错问题处理 EasyExcel描述 EasyExcel是一款基于Java的简单.省内存的读写Excel的开源项目.官网.使用起来确实比较方便,但是对于一些比 ...
最新文章
- NodeJs初学者经典入门解析
- setsockopt()使用方法(參数具体说明)
- NYOJ 108 士兵杀敌(一)
- ACL 2022 | 清华大学、DeepMind等指出现有小样本学习方法并不稳定有效,提出评价框架...
- lua实现多继承-方式2
- 响应式设计(Response Web Design)浅谈
- LA 4127 - The Sky is the Limit (离散化 扫描线 几何模板)
- 别人都说我老公的字写的不错,大家帮我看看这字行不?
- Apache服务安全加固及Apache优化
- 理解AOP思想(面向切面编程)
- Oracle Decode()函数和CASE语句的比较
- 多文件云传输系统框架
- C语言游戏开发——反弹球
- Android基本UI控件(一)
- 计算机物理学知识点,初中物理知识点计算公式表总结
- ps-半透明图片抠图
- echarts 世界地图 国家 中英文数据 nameMap
- Linux中部分命令英语全拼
- 行业首选|墨菲安全实力入选《开发安全产品及服务购买决策参考》
- 概念:ASP是一种语言么?
热门文章
- SpringBoot jap使用原生Sql的几种姿势
- 04_Linux软件包管理
- mysql tcmalloc_mysql安装tcmalloc
- 彻底禁用搜狗输入法的SGNews.exe
- 什么都能播放的媒体播放器——Potplayer
- dronekit 控制飞控 上/下/前/后/左/右 或是 上/下/东/西/南/北
- 模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)...
- 如何用ps(photoshop)把四角图片变成圆角图片?超级简单!
- phpcms 推荐位获取
- 棋牌平台短期内如何获得大量玩家