使用EF扩展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 = ; i < ;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不支持关联表数据插入,以关联方式批量插入数据时会出错。
使用EF扩展EntityFramework.BulkInsert实现批量插入的更多相关文章
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
原文链接:http://blog.csdn.net/fanbin168/article/details/51485969 批量插入 (17597条数据批量插入耗时1.7秒) using Sys ...
- 【转】Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)
E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包,它的说明有点过时了,最新版本已经改用对I ...
- (转)Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)
转自:http://www.cnblogs.com/jinzhao/archive/2013/05/31/3108755.html 今天乍一看,园子里居然没有关于这个类库的文章,实在是意外毕竟已经有很 ...
- Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)
E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包 1.先更新VS的NuGet版本http: ...
- EF批量插入(转)
原作者地址http://blog.csdn.net/zlts000/article/details/46385773 之前做项目的时候,做出来的系统的性能不太好,在框架中使用了EntityFramew ...
- EF批量插入数据(Z.EntityFramework.Extensions)
EF用原生的插入数据方法DbSet.ADD()和 DbSet.AddRange()都很慢.所以要做大型的批量插入只能另选它法. 1.Nugget 2.代码 using EF6._0Test.EF; u ...
- EF实现批量插入
Z.EntityFramework.BulkInsert EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率.此种条件下,通常会转回使用 ADO.NET 来完成任务.而 ...
- EF批量插入数据耗时对比
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- EF批量插入太慢?那是你的姿势不对
大概所有的程序员应该都接触过批量插入的场景,我也相信任何的程序员都能写出可正常运行的批量插入的代码.但怎样实现一个高效.快速插入的批量插入功能呢? 由于每个人的工作履历,工作年限的不同,在实现这样的一 ...
随机推荐
- Codeforces AIM Tech Round3
打得最烂一场Codeforces,多次都错题,无限WA... A题: 题意:给定n个橘子的大小,大小超过b的丢掉,不足d的补充进来,同时超过d的部分去掉,问要去掉几次 分析:直接模拟即可 #inclu ...
- 控制流之break
break语句是用来 终止 循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句.一个重要的注释是,如果你从for或while循环中 终止 ,任何对应的循环else块 ...
- (简单) POJ 3169 Layout,差分约束+SPFA。
Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...
- SocketChannel
Java NIO 中的 SocketChannel 是一个连接到 TCP 网络套接字的通道.可以通过以下 2 种方式创建 SocketChannel: 打开一个 SocketChannel 并连接到互 ...
- linux pci 协议一
当当热卖商品推荐 先打下广告,上面是一本好书了O(∩_∩)O~ 前言 因为遇到一个pci总线的问题,所以去学习了解linux 的pci驱动,中间总结了一些pci总线原理和linux驱动的知识,在此总结 ...
- cordova环境搭建
首先,需要了解一下cordova 和 phonegap 的关系.phoneGap是原先的名字,Cordova是phoneGap被捐给apache之后 用的项目名,phoneGap的名字也被保留了. 1 ...
- Spring与Struts框架整合
Spring与Struts框架整合 Struts,用Action处理请求 Hibernate,操作数据库 Spring,负责对象创建 Spring与Struts框架整合的关键点在与:让Struts框架 ...
- 10.TCP连接的建立与终止
1.建立连接协议 (1)请求端发送一个SYN段指明客户打算连接的服务器的端口,移机初始序号ISN.这个SYN段为报文段1. (2)服务器发回包含服务器的初始序号的SYN报文段作为应答.同时,将确认 ...
- 浅谈JavaWEB入门必备知识之Servlet入门案例详解
工欲善其事.必先利其器,想要成为JavaWEB高手那么你不知道servlet是一个什么玩意的话,那就肯定没法玩下去,那么servlet究竟是个什么玩意?下面,仅此个人观点并通过一个小小的案例来为大家详 ...
- js dorado
1.dorado http://bsdn.org/projects/dorado7/deploy/sample-center/com.bstek.dorado.sample.Main.d#40350