错误一:

程序完整报错:

A second operation started on this context before a previous operation completed. This is usually caused by different threads using the same instance of DbContext, however instance members are not guaranteed to be thread safe. This could also be caused by a nested query being evaluated on the client, if this is the case rewrite the query avoiding nested invocations.

中文翻译:

在上一个操作完成之前,在此上下文上启动了第二个操作。这通常是由使用同一DbContext实例的不同线程造成的,但是实例成员不能保证线程安全。这也可能是由于在客户机上计算的嵌套查询造成的,如果是这种情况,请重写查询以避免嵌套调用。

出现这个问题的原因是,我的数据库注入用的是单例模式,然后我在一个异步方法里用Task.Factory.StartNew开启了一个新线程,然后在这个新线程里操作了数据库。之后就发现这个错了。

解决办法:

1、避免在新开启的线程里操作数据库,可以单独封装方法然后通过返回值的方式去做一些处理。

2、重新New一个上下文

var optionsBuilder = new DbContextOptionsBuilder<SqlContext>();
optionsBuilder.UseSqlite(Configuration.GetConnectionString("Sqlite"));
using (var context = new SqlContext(optionsBuilder.Options))
{
//操作数据库的时候用context去保存
}

错误二:

完整错误:

Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling Dispose() on the context, or wrapping the context in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances.
Object name: 'SqlContext'.

中文翻译:

无法访问已释放的对象。此错误的一个常见原因是释放从依赖项注入解析的上下文,然后稍后尝试在应用程序的其他位置使用相同的上下文实例。如果对上下文调用Dispose()或在using语句中包装上下文,则可能会发生这种情况。如果使用依赖项注入,则应让依赖项注入容器负责处理上下文实例。

对象名:“SqlContext”。

出现这个问题的原因是,发现第一个错误之后,我想那我不注入单例注入成别的类型不就好了,然后下面的错误就诞生了。其实还是和我在一个异步方法里用Task.Factory.StartNew开启了一个新线程,然后在这个新线程里操作了数据库有关。

解决办法:

既然说上下文释放了那我再New一个好了,和上面的解决办法一样。

var optionsBuilder = new DbContextOptionsBuilder<SqlContext>();
optionsBuilder.UseSqlite(Configuration.GetConnectionString("Sqlite"));
using (var context = new SqlContext(optionsBuilder.Options))
{
//操作数据库的时候用context去保存
}

这两种错误的发生,其实最终的解决方案就是不要在新开的线程里操作数据库,尽量避免就行了,就不用特殊处理了。

.Net Core 程序报错 在上一个操作完成之前,在此上下文上启动了第二个操作。的更多相关文章

  1. 因Console.Read()导致Centos 后台运行.net core程序报错

    .net 控制台程序通常用 Console.Read(),或者Console.ReadKey()让进程阻塞保持,不退出. 但在.net core 需要将程序放在后台执行时 用Console.Read( ...

  2. MVC 中dapper的日志功能+程序报错修改

    由于之前的项目说最好要有日志功能,正好之前看过几篇这方面的文章就弄了点东西. 这是EF日志受启发很大的一个原文: http://www.cnblogs.com/GuZhenYin/p/5556732. ...

  3. WinDbg抓取程序报错dump文件的方法

    程序崩溃的两种主要现象: a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭 例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等 此种崩溃特点 ...

  4. 发送邮件程序报错454 Authentication failed以及POP3和SMTP简介

    一.发现问题 在测试邮件发送程序的时候,发送给自己的QQ邮箱,程序报错454 Authentication failed, please open smtp flag first. 二.解决问题 进入 ...

  5. eclipse下执行maprdeuc程序报错 java.lang.ClassNotFoundException

    最近遇到一个问题,不知怎么突然运行hadoop的map程序报错,困扰了我很久,现在来给大家分享分享.. 错误信息 2017-05-18 21:34:22,104 INFO [main] client. ...

  6. 运行编译后的程序报错 error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory

    运行编译后的程序报错  error while loading shared libraries: lib*.so: cannot open shared object file: No such f ...

  7. Window7中Eclipse运行MapReduce程序报错的问题

    按照文档:http://www.micmiu.com/bigdata/hadoop/hadoop2x-eclipse-mapreduce-demo/安装配置好Eclipse后,运行WordCount程 ...

  8. SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错

    SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ...

  9. Python 程序报错崩溃后,如何倒回到崩溃的位置?

    假设我们有一段程序,从 Redis 中读取数据,解析以后提取出里面的 name 字段: import json import redis client = redis.Redis() def read ...

随机推荐

  1. override关键字

    https://www.cnblogs.com/xinxue/p/5471708.html 2  重写 (override) 在 1.2.2 中提到 override 关键字,可以避免派生类中忘记重写 ...

  2. leetcode解题报告(25):Reverse Words in a String III

    描述 Given a string, you need to reverse the order of characters in each word within a sentence while ...

  3. noi.ac #43 dp计数

    \(sol\) 状态 \[f_{i, dis_1, dis_2, dis_3, dis_4}\] 表示到了第 \(i\) 层,其中 \(dis_{1}\) 表示第一根柱子剩下的最靠上的横木到当前 \( ...

  4. Java中的读文件,文件的创建,写文件

    前言 大家好,我是 Vic,今天给大家带来Java中的读文件,文件的创建,写文件的概述,希望你们喜欢 示意图 读文件 public static void read(String path,Strin ...

  5. LOJ6071. 「2017 山东一轮集训 Day5」字符串 [SAM]

    LOJ 思路 这种计数题显然是要先把每一个合法的串用唯一的方法表示出来.(我连这都没想到真是无可救药了) 如何唯一?容易想到把前缀尽可能多地在第一个串填掉,然后填第二个,第三个-- 如何做到这样?可以 ...

  6. Mac laravel: command not found

    如果用的oh-my-zsh 安装laravel 提示找不到.可以试试下面的 export PATH=$HOME/bin:/usr/local/bin:~/.composer/vendor/bin:$P ...

  7. 《自制编程语言--基于C语言 郑钢》学习笔记

    <自制编程语言>学习笔记 本仓库内容 <自制编程语言>源码 src/sparrow.tgz <自制编程语言>读书笔记 docs/* <自制编程语言>样章 ...

  8. mysql8数据库连接kettle

    1.将kettle连接mysql的包放入lib文件目录 2.修改data-integration\simple-jndi路径下的jdbc.properties配置文件,加上如下内容(kettle为数据 ...

  9. python中字符截取[-1]、[:-1]、[::-1]、[n::-1]等使用方法的详细讲解(建议留存)

    python涉及字符截取的详细功能讲解: str = ' print("str[0:3]:"+str[0:3]) # 正向截取字符串 0~3(不包含3) 即 012 print(& ...

  10. google chrome 浏览器插件

    如果感觉浏览器(chrome)的背景是白色太亮太刺眼,可以先在 设置->外观->主题背景 里选择 oceanic,将浏览器头部颜色设置为海蓝色.然后再安装插件 “眼睛护航”,改变所有网页的 ...