Z.EntityFramework.BulkInsert

EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率。此种条件下,通常会转回使用 ADO.NET 来完成任务。而EntityFramework.BulkInsert则是利用了Microsoft SQL Server的SqlBulkCopy 接口,实现了批量插入数据时的高效率。

在网上找到两篇相关的帖子,分别是:

(1)http://www.cnblogs.com/gaochundong/p/entity_framework_bulk_insert_extension.html,详细介绍SqlBulkCopy的实现原理及封装,鉴于水平有限,不能完全读懂,只能知其一二,代码没有运行起来。

(2)http://blog.csdn.net/pukuimin1226/article/details/48024995,对EF常规方式与BulkInsert批量插入方式进行了对比,但按照帖子中的nuget包安装后,实际测试会出现“空间“CSSpace”没有关联的集合。”的错误提示。

最终解决是在:

http://efbulkinsert.codeplex.com/

安装包:在项目nuget程序包管理器中搜索:“EntityFramework.Extensions.EF5”,如图:

安装第一项:Z.EntityFramework.Extensions.EF5即可。

简单DEMO:

(1)建表

我使用的是db first方式,在数据库中新建了一个测试表,只有两个字段,一个自增ID,一个测试用字段Title,数据表示意如下:

(2)编写测试DEMO

使用BulkInsert方式,与常规方式主要区别在于插入及保存方式,即:

db.BulkInsert(List);
db.BulkSaveChanges();

以下为向该表插入1万条数据的测试代码:

            StringBuilder sb = new StringBuilder();
ydssEntities db = new ydssEntities();
List<ydss_Test> List = new List<ydss_Test>(); //插入一万条数据
for (int i = 0; i < 10000;i++ )
{
List.Add(new ydss_Test { Title = i.ToString() });
}
Stopwatch sw = new Stopwatch();
sw.Start();
db.BulkInsert(List);
db.BulkSaveChanges();
sw.Stop();
sb.AppendFormat("BulkInsert插入耗时:{0}\r\n", sw.ElapsedMilliseconds);
Response.Write(sb.ToString());

实测执行结果:插入一万条数据的执行时间为:1742毫秒,不到两秒的时间,执行结果相对满意。

注:EntityFramework.BulkInsert不支持关联表数据插入,以关联方式批量插入数据时会出错。

本文转自:https://www.cnblogs.com/superfeeling/p/6382193.html

EF实现批量插入的更多相关文章

  1. c#数据批量插入

    由于之前面试中经常被问到有关EF的数据批量插入问题,今天以Sqlserver数据库为例,对.net中处理数据批量处理的方案进行了测试对比. 1.四种测试方案 (1)普通的EF数据批量插入:即调用DbS ...

  2. 一次EF批量插入多表数据的性能优化经历

    距离上次的博客已经有15个多月了,感慨有些事情还是需要坚持,一旦停下来很有可能就会停很久或者从此再也不会坚持.但我个人一直还坚持认为属于技术狂热份子,且喜欢精益求精的那种.最近遇到两个和数据迁移相关的 ...

  3. 使用EF扩展EntityFramework.BulkInsert实现批量插入

    EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率.此种条件下,通常会转回使用 ADO.NET 来完成任务.而EntityFramework.BulkInsert则是利 ...

  4. EF批量插入数据(Z.EntityFramework.Extensions)

    EF用原生的插入数据方法DbSet.ADD()和 DbSet.AddRange()都很慢.所以要做大型的批量插入只能另选它法. 1.Nugget 2.代码 using EF6._0Test.EF; u ...

  5. EF批量插入数据耗时对比

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. EF批量插入太慢?那是你的姿势不对

    大概所有的程序员应该都接触过批量插入的场景,我也相信任何的程序员都能写出可正常运行的批量插入的代码.但怎样实现一个高效.快速插入的批量插入功能呢? 由于每个人的工作履历,工作年限的不同,在实现这样的一 ...

  7. Entity Framework与ADO.NET批量插入数据性能测试

    Entity Framework是.NET平台下的一种简单易用的ORM框架,它既便于Domain Model和持久层的OO设计,也提高了代码的可维护性.但在使用中发现,有几类业务场景是EF不太擅长的, ...

  8. MongoDB学习笔记~批量插入方法的实现

    回到目录 批量插入在EF时代大叔就自己封装过,原理是将多次SQL连接和多次向SQL发送的指令减少到1次,或者1000条数据1次,而对于EF产生的语句来说,这无疑是性能高效的,因为EF这边在处理时,每个 ...

  9. entity framework core 支持批量插入,值得期待

    entity framework6.x之前搞了这么多版本,构架这么牛B,居然没有批量插入更新的功能,但有很多替换的解决方案,例如Entity Framework Extended Library(ht ...

随机推荐

  1. Py之Crawler:利用python的爬虫功能实现从各种网站上(以百度贴吧为例)获得你喜欢的照片下载到本地电脑上——Jason niu

    import urllib.requestimport re import os def open_url(url): req=urllib.request.Request(url) req.add_ ...

  2. python kafka权限校验client.id

    kafka集群有权限校验,在连接时需要加入client.id.但pykafka不能配置该选项.搜索了一下,需要使用confluent-kafka 链接: https://blog.csdn.net/l ...

  3. 本机是wifi,虚拟机无法连接外网问题

    1.首先看自己本机的各网口是否都启动. 2.在虚拟机中的虚拟网络编辑器中,选择桥接模式,并选择对应第一步的WLAN端口. 3.在虚拟机设置中选择自定义,选择第二部中选的VMnet2即可上网了.

  4. 通过源码理解HashMap的并发问题

    最近在学习有关于Java的基础知识,在学习到HashMap的相关知识的时候,了解了HashMap的并发中会出现的问题,在此记录,加深理解(这篇文章是基于Java1.7的,主要是为了更加直观,更新版本的 ...

  5. JS 存储

    1. 描述cookie ,sessionStorage 和 localStorage 的区别? cookie : 本身用于客户端和服务器端通信, 但是有本身存储的功能,就被‘借用’ 使用documen ...

  6. 查看Oracle中存储过程长时间被卡住的原因

    1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CUX_OE_ORDER_RPT_PKG' AND LOCKS!='0 ...

  7. Angular 2项目的环境配置和项目搭建

    AngularJS2 发布于2016年9月份,它是基于ES6来开发的. AngularJS2 是一款开源JavaScript库,由Google维护,用来协助单一页面应用程序运行.AngularJS2 ...

  8. EF CodeFirst类生成器

    前段时间由于用到EF Code First. 上头让我添加一个功能,然后....要映射12张表到实体类中... 太无语了吧...一张表30多个字段啊老大!!!! "有没有工具可以快速弄啊,自 ...

  9. 2019_BUAAOO_第一单元总结

    前言 OO第一单元共有三次作业,分别为多项式求导.带有三角函数与幂函数的表达式求导.带有嵌套表达式因子的表达式求导.虽然这三次作业都离不开求导,可是每次作业的复杂度都是大大递增的.对于习惯于面向过程编 ...

  10. angular5与angular6的比较