一、EF Core 批量添加数据 问题详解 AddRange()

问题整理:

1.对于批量写入数据,每次几万条情况 使用 Add() 方法不合理

2.使用AddRange() 每次批量写入数据也要有个数限制,不然也会异常报错

3.批量写入数据,如果Sqlserver 日志文件或者磁盘空间占满也会抛出异常。

4.批量写入需要控制对象的字符数量,字符数量大的写入慢没太多优化空间,看你的磁盘和硬件情况了。

批量数据写入解决方案:

1.写入每条数据字符量尽可能小

2.分段写入,避免内存不足异常

3.使用第三方库,协助增速写入:Z.EntityFramework.Extensions.EFCore

更多参考:

二、批量数据分段写入富文本字符数量较大, 使用AddRange()

如果不分段写入,内存不足会抛出异常

static void Test3()
{// EF Core 批量添加数据 问题详解 AddRange()try{QLSingleContext _context = new QLSingleContext();ArtileNews news = _context.ArtileNews.Find(6);DateTime start = DateTime.Now;List<ArticleInfo> artList = new List<ArticleInfo>();for (int i = 0; i < 50000; i++){ArticleInfo model = new ArticleInfo();model.Title = news.Title;// model.Content = news.Content;model.Content = "内容稍的测试数据";model.ViewCount = 0;model.LastEditTime = DateTime.Now;model.EmpId = 4;artList.Add(model);}Console.WriteLine($"内存组建完成使用{(DateTime.Now - start).TotalSeconds}秒");//1.批量添加的个数是有上限的,根据自己电脑内存而定//2.单条数据字符空间大慢//3.数据太多一次添加太慢_context.ArticleInfos.AddRange(artList);_context.SaveChanges();DateTime end = DateTime.Now;Console.WriteLine($"添加成功了{artList.Count}条数据");Console.WriteLine($"总共使用{(end - start).TotalSeconds}秒");}catch (Exception ex){throw ex;}
}

分段写入代码处理:

//分段插入----此方法不奏效,但可以解决内存不足的bug
static void MyAddRange(QLSingleContext _context, List<ArticleInfo> artList)
{//每次插入2000 条int num = 0;while (true){var temp = artList.Skip(num).Take(10000).ToList();if (temp.Count == 0)break;//使用默认_context.ArticleInfos.AddRange(temp);_context.SaveChanges();num += temp.Count;}
}

插入非富文本,字符量小的数据 5万条:

三、批量查询想增加查询速度,可以取消上下文监听

//查询禁用跟踪
        //_context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
        // _context.ChangeTracker.AutoDetectChangesEnabled = false;

更多:

EFCore 关联表查询_多表使用整理

Ef Core 使用Entity方式配置外键

SqlServer 大量数据热汇总优化整理

EF Core 批量写入数据使用整理_EF Core批量插入数据(一)相关推荐

  1. mysql批量写入redis_如何高效地向Redis插入大量的数据(推荐)

    最近有个哥们在群里问,有一个日志,里面存的是IP地址(一行一个),如何将这些IP快速导入到Redis中. 我刚开始的建议是Shell+redis客户端. 今天,查看Redis官档,发现文档的首页部分( ...

  2. mysql如何防止插入重复数据_如何防止MySQL重复插入数据,这篇文章会告诉你

    在MySQL进行数据插入操作时,总是会考虑是否会插入重复数据,之前的操作都是先根据主键或者唯一约束条件进行查询,有就进行更新没有就进行插入.代码反复效率低下. 新建表格 CREATETABLE`per ...

  3. pdo插入mysql数据出错_php中通过pdo插入数据时,sql语句错误?

    再次先谢谢各位大佬!! 接下来直接看代码: include 'mysql_ini.php'; $sql_select = "select * from word where word = ? ...

  4. python写数据到mysql_使用python3 实现插入数据到mysql

    我就废话不多说了,直接上代码吧! pip install pymysql import pymysql import pandas as pd conn = pymysql.connect( host ...

  5. oracle 导入数据时主键丢失,Oracle 插入数据 返回主键

    场景:解决getJdbcTemplate往oracle数据库中插入数据返回主键出错有关问题 解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题 我们使用Spring中的J ...

  6. mysql添加数据不阻塞_主键表插入数据不提交,外键表插入数据被阻塞

    有客户和我说:他在含主外键的表中实验发现,在主表数据未提交,然后在外键表插入该数据数据时,出现外键表hang住现象.我开始以为是不同的会话,根据oracle数据库的一致性原则,应该新会话在外键表中不能 ...

  7. 存在的hive插入数据_往hive表中插入数据以及导出数据

    转载:https://blog.csdn.net/qq_26442553/article/details/80380590 转载:https://blog.csdn.net/weixin_436817 ...

  8. ajax向数据库中添加数据,用jqueryajax在数据库中插入数据

    我有一个带有c#(.net4)代码的表单.在这种形式下,用户填写他的规格并提交. 我想在jquery中使用ajax或post方法来预防blink.i写流程代码. "成功"函数执行, ...

  9. mysql插入数据变慢的原因_mysql插入数据变慢的原因

    最近的项目需要导入大量的数据,插入的过程中还需要边查询边插入.插入的数据量在100w左右.一开始觉得100w的数据量不大,于是就插啊插,吃了个饭,回来一看,在插入了50多w条数据后,每秒就只能插10条 ...

最新文章

  1. Centos6.5 rpm方式指定目录安装JDK
  2. yii 验证器类 细说YII验证器
  3. (三)PHP网页架站
  4. tiptop 编译运行_tiptop客制规范总结
  5. 实现java.lang.Runnable接口
  6. threadpoolexecutor参数_ThreadPoolExecutor的使用
  7. 逐渐“狗化”!网易云音乐控诉酷狗像素级抄袭,酷狗高管反击...
  8. 在大厂工作5年的大神,给前端初学者的四大建议,收藏咯
  9. python configure函数 循环_使用python统计git仓库中频繁修改的热点函数
  10. java github关联登录_没错,用三方Github做授权登录就是这么简单!(OAuth2.0实战)...
  11. DPDK QOS1 -- Linux HQOS的框架
  12. 多媒体封装格式的比较
  13. Nginx+Tomcat关于Session的管理
  14. python超链接程序,python超链接
  15. es java 创建索引_Elasticsearch(ES) 创建索引
  16. 如何理解图片RGB通道在python(numpy)中的数据构成
  17. uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程
  18. STM32F103ZG单片机解密确保成功 ST芯片解密
  19. Ubuntu打开WPS ofifice卡顿、无法进行编辑操作解决办法
  20. C语言3067答案,教师招聘《小学教育心理学》通关试题每日练(2020年03月03日-3067)...

热门文章

  1. 【java】BeanUtils.populate()的使用
  2. VS 调试时,不允许修改代码
  3. 如何在富文本中插入表情,word文档,及数学公式?
  4. Photoshop序列号
  5. 设备使用python连接阿里Iot
  6. ECCV 2020 best paper: RAFT算法解析
  7. SpringBoot + Spring Cloud +Vue 管理系统前端搭建(二、visual studio code开发前端项目
  8. vue报错:vue.js:634 [Vue warn]: Cannot find element: #app
  9. 服务器内存超频性能,服务器内存可以超频么
  10. 增加PRODUCT_BOOT_JARS及类 提供jar包给应用