使用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批量插入太慢?那是你的姿势不对
大概所有的程序员应该都接触过批量插入的场景,我也相信任何的程序员都能写出可正常运行的批量插入的代码.但怎样实现一个高效.快速插入的批量插入功能呢? 由于每个人的工作履历,工作年限的不同,在实现这样的一 ...
随机推荐
- LWIP_STM32_ENC28J60_NETCONN_UDP(3)
前面移植了lwip之后只是简单地做了一个dhcp的程序,但是实际工作中经常要用来通讯,那今天就来讲一讲怎么用lwip来进行UDP通讯 要使用数据通信首先第一步得知道lwip是怎么样保存数据的,在使用n ...
- checkbox选择多数据传入后台时,怎样解析数据
<input type="checkbox" name="test" value="值1" />显示的内容<input t ...
- X-002 Exyson4412芯片启动过程分析
移植u-boot到FriendlyARM Tiny4412开发板上,首先我们需要对Samsung Exyson4412芯片的启动方式.系统时钟初始化.串口初始化.内存初始化以及开发板的内存地址空间分配 ...
- uCOS-iii 中定义的一些常量
uCOS-iii 中定义的一些常量 uCOS-iii 中有许多宏定义的量,这些量不需要全部记住是什么意思,因为在阅读代码的时候可以选中变量或宏定义然后右键查看定义,就可以知道它代表的什么意思.但是如果 ...
- 全方位分析Objcetive-C Runtime 分类: ios技术 2015-03-11 22:29 77人阅读 评论(0) 收藏
本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 简介 与Runtime交互 ...
- UVa 495 - Fibonacci Freeze
题目大意:计算斐波那契数列的第n项. 由于结果会很大,要用到大数.开始本来想节省空间的,就没用数组保存,结果超时了... import java.io.*; import java.util.*; i ...
- 学习tabhost 实现微博的主界面
2014-05-27 吴文付 微博的主界面还是很漂亮的,我们这里来熟悉下tabhost的使用, 网上资料很多,主要参考了:http://blog.csdn.net/shulianghan/articl ...
- JavaScript高级程序设计-8:BOM
1. 什么是BOM? BOM(Browser Object Mode) 是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的.可以与浏览器窗口进行互动的对象 ...
- Java XML解析器
使用Apache Xerces解析XML文档 一.技术概述 在用Java解析XML时候,一般都使用现成XML解析器来完成,自己编码解析是一件很棘手的问题,对程序员要求很高,一般也没有专业厂商或者开源组 ...
- assert 实现分析
一直以来,对于assert的实现总是不太理解,现在深入assert背后的代码,总算对assert的实现有了一个清醒的认识. assert基于宏定义与宏展开实现.首先介绍一下assert的功能:它能够断 ...