EF DbContext 并发执行时可能出现的问题
现在许多Web项目都使用了IOC的DI注入组件。其中对象的生命周期管理是非常重要的。
有时我们为了提高请求的响应,经常在请求线程中执行多个子线程,然而忽略了EF的DbContext的生命周期管理。
DbContext并非是线程安全的。子线程A和子线程B 可能同时的对同一个DbContext进行操作,从而导致下面的异常(可能随机抛出其中一个)。
所以建议不要不同线程共用同一个DbContext.
{"已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。"}
“System.InvalidOperationException”类型的异常在 EntityFramework.dll 中发生,但未在用户代码中进行处理 其他信息: The context cannot be used while the model is being created. This exception may be thrown if the context is used inside the OnModelCreating method or if the same context instance is accessed by multiple threads concurrently. Note that instance members of DbContext and related classes are not guaranteed to be thread safe.
“System.NullReferenceException”类型的异常在 EntityFramework.dll 中发生,但未在用户代码中进行处理 其他信息: 未将对象引用设置到对象的实例。
“System.InvalidOperationException”类型的异常在 System.Data.dll 中发生,但未在用户代码中进行处理 其他信息: 不允许更改“ConnectionString”属性。连接的当前状态为已关闭。
测试代码
private async void button1_Click(object sender, EventArgs e)
{
try
{
var mydb = new MyDbContext();
var arr = new MyExecuterOfEF[];
arr[] = new MyExecuterOfEF(mydb, (db) =>
{
var r = db.Tests.FirstOrDefault();
});
arr[] = new MyExecuterOfEF(mydb, (db) =>
{
var r = db.Tests.FirstOrDefault();
}); Parallel.ForEach(arr, (myExecute) =>
{
myExecute.Execute();
}); MessageBox.Show("结束");
}
catch (Exception ex)
{
//MessageBox.Show(ex.ToString());
this.textBox1.Text = ex.ToString();
}
}
EF DbContext 并发执行时可能出现的问题的更多相关文章
- Mybatis 并发执行导致cpu占满的问题
最近线上服务经常 出现cpu达到100%的问题,发现都是执行oracle操作的方法就没有返回.经过排查,最后定位到cpu消耗在以下方法 System.Collections.Generic.Dicti ...
- EF DbContext.Configuration.ProxyCreationEnabled 什么鬼?
今天在开发项目的时候,使用 EF,突然遇到了这样一个错误: An entity object cannot be referenceed by multiple instances of IEntit ...
- 关于有默认值的字段在用EF做插入操作时的思考(续)
问题描述 今天下午(看现在这时间,应该是昨天下午了哈),园友 choon 写了这样一篇博文<关于有默认值的字段在用EF做插入操作时的思考>. 博文内容主要记录的是 choon 使用 EF ...
- 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework
前言 一直以来写的博文都是比较温婉型的博文,今天这篇博文算是一篇批判性博文,有问题欢迎探讨,如标题,你到底会不会用EntityFramework啊. 你到底会不会用EntityFramework啊 面 ...
- 【转】别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework
前言 一直以来写的博文都是比较温婉型的博文,今天这篇博文算是一篇批判性博文,有问题欢迎探讨,如标题,你到底会不会用EntityFramework啊. 你到底会不会用EntityFramework啊 面 ...
- C#实现如何判断一个数组中是否有重复的元素 返回一个数组升序排列后的位置信息--C#程序举例 求生欲很强的数据库 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework
C#实现如何判断一个数组中是否有重复的元素 如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hasht ...
- 深入理解 EF Core:EF Core 写入数据时发生了什么?
阅读本文大概需要 14 分钟. 原文:https://bit.ly/2C67m1C 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能 ...
- 【说解】在shell中通过mkfifo创建命名管道来控制多个进程并发执行
背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比 ...
- SSIS Design3:并发执行
1,利用优先约束来并发处理数据,Data Flow Task 和 Data Flow Task 1 是并发执行的,而 Data Flow Task2 必须等到 Data Flow Task 和 Dat ...
随机推荐
- jquery 中jsonp的实现原理
在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,即一般的 ajax是不能进行跨域请求的.但 img.iframe .script等标签是个例外,这些标签可以通过 src属性请求到其 ...
- MarkdownPad2.5 注册码
邮箱: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6b ...
- (转)实现DataList的分页 新增列
前几天在做网上商城,要展示商品信息(有图片,有文字),DataView虽然可以分页,但它的缺点是不能自定义显示格式.而DataList解决了它的缺点,但DataList本身却不能分页.很是头痛,于是在 ...
- powershell通过wps excel导出csv
powershell比较强大,比较好用,比较方便. $et=New-Object -ComObject et.application #$et.Visible=$true $et.DisplayAle ...
- CSS3中的px,em,rem,vh,vw辨析
1.px:像素,精确显示 2.em:继承父类字体的大小,相当于"倍",如:浏览器默认字体大小为16px=1em,始终按照div继承来的字体大小显示,进场用于移动端 em换算工具:h ...
- UIButton无法响应点击事件
一.问题描述 因为项目需要,需要UITableView上添加固定的筛选表头,一直固定,不能随UITableView滚动.所以直接将表头与UITableView分离,将它添加到控制器的UIView上,即 ...
- 如何写 JS 的链式调用 ---》JS 设计模式《----方法的链式调用
1.以$ 函数为例.通常返回一个HTML元素或一个元素集合. 代码如下: function $(){ var elements = []; ;i<arguments.length;i++){ v ...
- yii框架安装
YII安装: 下载最版本http://www.framework.com 下载高级的->yii with advanced APPlication template 解压至访问目录下 ...
- jquery Datatables 行数据删除、行上升、行下降功能演示
Datatables 是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能. 官方网站:http://www.datatables.net Datatables ...
- 【转载】SSM框架整合
http://blog.csdn.net/gebitan505/article/details/44455235/ 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于20 ...