每个请求的 DbContext

2024-02-10

我需要为导入文件实现多线程后台作业。 我已经通过后台作业(Hangfire)实现了它。但如果我使用一个线程,它会变得非常慢。 该函数看起来像这样。

我使用非事务单元立即保存对数据库的更改。

var contactFound = await _contactRepository.FirstOrDefaultAsync(x => x.Email.ToLower() == contact.Email.ToLower());

            if (contactFound != null)
            {
                await _bjInfoManager.AddLog(args.JobId, "Found duplicated email: " + contact.Email);

            }
            else
            {
                contact.ContactListId = args.ContactListId;
                contact.Email = contact.Email.ToLower();

                await _contactRepository.InsertAsync(contact);

                //Save changes in db
                await CurrentUnitOfWork.SaveChangesAsync();
            }

当我尝试将其与生产者-消费者数据流模式一起使用时,会出现问题。我抛出异常“在上一个异步操作完成之前,在此上下文上启动了第二个操作”。

问题是如何在该方法内创建隔离的 DbContext。 请帮我。


事务不应该是多线程的。如果在 UOW 中创建新任务/线程,则可以在 using 块中使用 IUnitOfWork.Begin(TransactionScopeOption.RequiresNew) 创建单独的 UOW。

查看链接

  • https://github.com/aspnetboilerplate/aspnetboilerplate/issues/619 https://github.com/aspnetboilerplate/aspnetboilerplate/issues/619
  • 实体框架支持多线程吗? https://stackoverflow.com/questions/36854087/does-entity-framework-support-multi-threading
  • 实体框架和多线程 https://stackoverflow.com/questions/9099359/entity-framework-and-multi-threading

如果您使用 Microsoft SQL Server,那么我建议您使用批量插入。它比实体框架超级快。

https://learn.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql https://learn.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每个请求的 DbContext 的相关文章

随机推荐

  • Django - 跨多个视图形成并保存进度

    我正在开发一个 Django 项目 为了使表单体验更加流畅 我想将 ModelForm 分布在几个页面上 如果登录的用户可以在表单中保存进度而不实际发布内容 在这种情况下 JobApplication用户可以返回填写信息 而无需实际发送应用
  • 是否可以在网格行定义上使用触发器?

    我有一个网格 其行需要根据视图模型动态调整大小 我想做类似以下的事情
  • 在生产模式下构建会导致空页面,而在开发模式下构建则完美运行(Angular 8)

    在开发模式 APS WebAPI 下 构建工作完美 没有错误 ng b watch 当更改为生产模式 ng b aot 或 ng b prod 时 页面加载时不会出现错误 但会导致空页面 Index cshtml 将通过从 Homecont
  • Node.js 编程工作流程 - 测试、代码、测试

    在开始用 Node js 开发有用的东西之前 您的流程是什么 您是否在 VowJS Expresso 上创建测试 你使用 Selenium 测试吗 什么时候 我有兴趣获得一个很好的工作流程来开发所有类似于 Rails 的 Node js 应
  • 如何在具有多个电源的单个模块项目中设置 sbt-native-packager

    我有一个单模块客户端 服务器项目 每个项目都有一个主模块 我正在尝试使用sbt native packager为两者生成启动脚本 项目 P scala object Tactic extends Build lazy val root pr
  • Pointfield 与 geodjango、javascript 和 google 地图

    我正在尝试显示并绘制数据库中存储的纬度和经度点的线 这是我的代码 为了简洁起见 我删除了一些不必要的变量 这是我的模型 class GpsLog models Model device models ForeignKey Device re
  • R 中的滚动计算

    我正在尝试使用数据表在 R 中建立摊销贷款帐户模型 每行代表一个月 每个月都会有一笔还款或预支资金 并根据上个月的余额收取利息 例如 gt loan lt data table loan age seq 0 9 payment c 5000
  • 输出包含所有转义字符的 C++ 字符串

    我有一个像这样的字符串 string s t Hello n 当我打印它时 它会给我一个选项卡 然后是 Hello 然后是一个新行 但是 我是否可以打印它 以便在控制台中看到 t Hello n 换句话说 我希望字符串忽略转义字符并将其视为
  • 使用 Scala 模式匹配时工作正则表达式失败

    在以下代码中 使用 Java API 时会匹配相同的模式 但使用 Scala 模式匹配时不会匹配 import java util regex Pattern object Main extends App val text oAuth h
  • 如何使用批处理文件重命名文件以包含日期?

    我有一个显示警报打印机的文本文件 我想在Windows XP下设置一个批处理文件 以更改警报打印机的默认名称以包含日期 这将使搜索错误变得更加容易 警报打印机被捕获到文本文件中 我已经能够更改名称 但每次我尝试将名称设置为日期时 要么什么也
  • TestNG:在运行时更改线程数

    假设我有一个可以并行或串行执行的套件 然而 这样做的决定要等到运行时才能决定 启动该套件的常见方法如下 TestNG runner new TestNG if runInParallel set parallel mode too here
  • Flash 横幅在 Chrome 中不起作用

    我的网站中有一些 Flash 横幅和一些 GIF 几天前 我注意到使用 Chrome 浏览时 Flash 不工作 用IE浏览时一切正常 这是我的网站的链接 http batgalim org il http batgalim org il
  • 为什么 Numpy 只有维度 (n,) 而不是 (n,1) [重复]

    这个问题在这里已经有答案了 我对此感到好奇有一段时间了 我可以忍受这一点 但如果不采取足够的照顾 它总是会咬我 所以我决定将其发布在这里 假设以下示例 Numpy 版本 1 8 2 a array 0 1 2 3 print shape a
  • 在输入文本字段之前禁用按钮?

    我在一个视图中有几个 uitextfields 我想禁用 uibutton 直到所有字段都输入了一些内容 这样做的最佳方法是什么 理想情况下 我也想做一些基本验证 确保所有条目都是数字 EDIT 无法让以下解决方案完全发挥作用 下面是我工作
  • 如何在 Symfony2 表单中为集合添加自动完成字段并使用 Propel?

    我将 Symfony 2 1 表单与 PropelBundle 一起使用 并且尝试重构一个具有对象下拉列表 可供选择 的表单 以代替使用 jquery 自动完成字段 使用 AJAX 对于下拉列表 我在表单类型中使用了以下代码 对于下拉列表来
  • iOS 8.3 Mobile Safari 禁用表情符号渲染

    苹果最近发布了iOS 8 3 他们添加了更多表情符号 现在所有表情符号都在移动 safari 中呈现 例如 将呈现为表情符号图标 有没有办法禁用表情符号渲染 例如通过 CSS 或 JavaScript 是的 您可以使用适当的变体字形逐个字符
  • 如何使用邮递员休息客户端将post请求发送到以下post方法

    我只是想知道如何将 JSON 对象发送到createTrackInJSON Track track 方法 用 Post通过邮递员休息客户端进行注释 这里 如何将 JSON 对象传递给 createTrackInJSON Track trac
  • UWP/Windows 10 移动版中的 System.Threading.Thread 替换

    在UWP中 如何访问线程对象 我想更改我将管理的主线程和附加线程的名称 我还想检查当前线程是否是主线程 我的目标是 Windows 10 Mobile 以下代码示例适用于桌面 但不适用于手机 获取 System DllNotFoundExc
  • state_activated预蜂窝

    你如何使用
  • 每个请求的 DbContext

    我需要为导入文件实现多线程后台作业 我已经通过后台作业 Hangfire 实现了它 但如果我使用一个线程 它会变得非常慢 该函数看起来像这样 我使用非事务单元立即保存对数据库的更改 var contactFound await contac