• 首先我们大部分的efcore框架用的DbContext(或者封装的repo)都是底层注入的上下文容器实体。
  • 然后Dbcontext不是线程安全的,也就是说,你在当前线程中,只能创建一个 DbContext 实例对象(特定情况下),并且这个对象并不能被共享。
  • 当我们使用多线程去执行数据库的操作时就有可能造成各种问题。
  • 我这里就在网站启动时去跑发布和订阅任务。
  • 解决方案:使用using从ioc容器中创建新的dbcontext 。然后用完立即释放。这样就不会占用主线程的dbContext了。
     /// <summary>
    /// 执行未发布成功的信息
    /// </summary>
    public void ToBePublishs()
    {
    Console.WriteLine("开始执行未发布任务");
    using (var _eventClientDbContext = (EventClientDbContext)ServiceProvider.CreateScope().ServiceProvider.GetService(typeof(EventClientDbContext)))
    {
    var PublishsList = _eventClientDbContext.Publishs.Where(a => a.PublishStatus == false).ToList();
    List<Publishs> publishsList = PublishsList.ToList();
    if (publishsList.Count > )
    {
    Console.WriteLine("开始执行未发布任务,本次任务执行条数为:" + publishsList.Count());
    using (var tran = _eventClientDbContext.Database.BeginTransaction())
    {
    foreach (var PublishsInfo in publishsList)
    {
    //var Result = ClientPost(ClientType.Publishs, PublishsInfo);
    var Result = string.Empty;
    try
    {
    Result = ClientPost(ClientType.Publishs, PublishsInfo);
    if (Result.Contains("Success"))
    {
    PublishsInfo.PublishStatus = true;
    PublishsInfo.ModifyTime = DateTime.Now;
    _eventClientDbContext.Publishs.Update(PublishsInfo);
    _eventClientDbContext.SaveChanges();
    }
    }
    catch (Exception ex)
    {
    Console.WriteLine("执行未发布成功的信息抛出异常:" + ex.StackTrace + ex.Message);
    continue;
    }
    }
    tran.Commit();
    }
    }
    }
    Console.WriteLine("未发布任务End");
    }

关于多线程efcore dbcontext 的解决方案。的更多相关文章

  1. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用

    目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 多线程的四种解决方案:pthread,NSThread,GCD,N ...

  2. abp(net core)+easyui+efcore仓储系统——解决方案介绍(二)

    abp(net core)+easyui+efcore仓储系统目录 abp(net core)+easyui+efcore仓储系统——ABP总体介绍(一) ABP框架 首先介绍一下abp框架,abp其 ...

  3. EFCore DbContext 报SqlException: Incorrect syntax near 'OFFSET'.

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSq ...

  4. An entity object cannot be referenced by multiple instances of IEntityChangeTracker 的解决方案

    使用EF对建立了关系的表新增记录时出现: An entity object cannot be referenced by multiple instances of IEntityChangeTra ...

  5. IOS 使用FMDB多线程访问数据库 及databaseislocked的问题

    原理:文件数据库sqlite,同一时刻允许多个进程/线程读,但同一时刻只允许一个线程写.在操行写操作时,数据库文件被琐定,此时任何其他读/写操作都被阻塞,如果阻塞超过5秒钟(默认是5秒,能过重新编译s ...

  6. 黑马程序员 Java基础<九>---> 多线程

    ASP.Net+Android+IOS开发..Net培训.期待与您交流! 多线程 一.概述: 1.线程是什么 说到线程,我们就得先说说进程.所谓进程,就是一个正在执行(进行)中的程序,每一个进程执行都 ...

  7. 情景linux--shell如何实现多线程?

    情景linux--shell如何实现多线程? 情景 shell脚本的执行效率虽高,但当任务量巨大时仍然需要较长的时间,尤其是需要执行一大批的命令时.因为默认情况下,shell脚本中的命令是串行执行的. ...

  8. iOS学习——(转)多线程

    转载自:iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用 一.多线程的基本概念 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和 ...

  9. [转]linux shell 多线程实现

    情景 shell脚本的执行效率虽高,但当任务量巨大时仍然需要较长的时间,尤其是需要执行一大批的命令时.因为默认情况下,shell脚本中的命令是串行执行的.如果这些命令相互之间是独立的,则可以使用“并发 ...

随机推荐

  1. NFS的搭建

    NFS是Network File System的简写,即网络文件系统. 网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件.通过使用N ...

  2. Apache工作流程

    一个经典的Apache处理php页面的流程 需要连接mysql数据库并处理的流程 网站是一系列网页的组合 从用户角度看就是访问诸如 hhtp://www.baidu.com -----url 这是互联 ...

  3. 手机端 设置html上font-size的值 使用rem

    在head标签上加入: (function() { var b = navigator.userAgent; ipad = b.match(/(iPad).*OS\s([\d_]+)/) ? true ...

  4. 14、SpinBox与Horizontal Scroll Bar

    设定这两个控件maximum为100,转到槽 void MainWindow::on_horizontalSlider_valueChanged(int value) { ui->spinBox ...

  5. Java类路径的问题

    下面是eclipse中的文件组织形式. 下面是硬盘中文件的组织形式: src:中就是自己编写的没有编译的代码. target中是编译的Java中的class文件和一些不用编译的文件.这样也就明白了为什 ...

  6. POJ 3723 征兵问题(最小生成树算法的应用)

    Conscription Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15923   Accepted: 5510 Des ...

  7. 论文阅读:ClickNF: a Modular Stack for Custom Network Functions

    摘要: 网络功能虚拟化最近允许用等效的软件实现代替专用设备, Click路由器是朝这个方向迈出的第一步,它定义了用于通用数据包处理的模块化平台. 尽管Click具有重大影响,但它不提供本机L4实现,而 ...

  8. 11.Python变量及其使用

    无论使用什么语言编程,其最终目的都是对数据进行处理.程序在编程过程中,为了处理数据更加方便,通常会将其存储在变量中. 形象地看,变量就像一个个小容器,用于“盛装”程序中的数据.除了变量,还有常量,它也 ...

  9. Value '0000-00-00' can not be represented as java.sql.Date解决办法

    java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp 问题描述 ...

  10. TCP定时器 之 FIN_WAIT_2定时器

    当TCP主动关闭一端调用了close()来执行连接的完全关闭时会执行以下流程,本端发送FIN给对端,对端回复ACK,本端进入FIN_WAIT_2状态,此时只有对端发送了FIN,本端才会进入TIME_W ...