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实现批量插入的更多相关文章

  1. EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除

    原文链接:http://blog.csdn.net/fanbin168/article/details/51485969   批量插入 (17597条数据批量插入耗时1.7秒)   using Sys ...

  2. 【转】Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)

    E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包,它的说明有点过时了,最新版本已经改用对I ...

  3. (转)Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)

    转自:http://www.cnblogs.com/jinzhao/archive/2013/05/31/3108755.html 今天乍一看,园子里居然没有关于这个类库的文章,实在是意外毕竟已经有很 ...

  4. Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)

    E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包 1.先更新VS的NuGet版本http: ...

  5. EF批量插入(转)

    原作者地址http://blog.csdn.net/zlts000/article/details/46385773 之前做项目的时候,做出来的系统的性能不太好,在框架中使用了EntityFramew ...

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

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

  7. EF实现批量插入

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

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

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

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

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

随机推荐

  1. 缩短url-url短地址链接

    之前给合作方二维码时隐藏的url过长,导致合作方提出在打印的时候打印不出来的问题,要求url长度在50字节内,所以写了缩短url功能. var url = string.Format("{0 ...

  2. python--字符串操作(删除,替换)

    示例: 替换字符串开头和结尾处的空格 1. [代码][Python]代码     跳至 [1] [全屏预览] view source print? 01 # -*- coding: utf-8 -*- ...

  3. (中等) POJ 1436 Horizontally Visible Segments , 线段树+区间更新。

    Description There is a number of disjoint vertical line segments in the plane. We say that two segme ...

  4. FFT算法的完整DSP实现(转)

    源:FFT算法的完整DSP实现 傅里叶变换或者FFT的理论参考: [1] http://www.dspguide.com/ch12/2.htm The Scientist and Engineer's ...

  5. FZU 2099 魔法阵

    手算. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> u ...

  6. UVa 900 - Brick Wall Patterns

    题目大意:用1*2的砖头建n*2的墙,问有多少种不同的砖头排列方式?与斐波那契序列相似. #include <cstdio> #define MAXN 60 #define N 50 un ...

  7. Struts2验证

    一.声明式验证 1.字段验证 fielderror的两种显示方式 fielderror的提示信息可以国际化 2.非字段验证:actionErrors / <s:actionerror> 例 ...

  8. UVa 706 & ZOJ 1146 LC-Display

    题目大意:给你一个数字n和字体大小s,输出数字的液晶显示.直接模拟,代码如下: #include <stdio.h> void draw(int n,int s,int row) { in ...

  9. iOS 程序开发

    准备 iOS 开发 之 编程知识点 iOS 程序调试 iOS 之 OC开发实战 iOS 架构模式 iOS 之 新功能.扩展

  10. 创建 github 仓库

    1. 创建入口 在右上角找到 “+” 然后,选择 “New repository” 进行创建. 2. 填入信息 输入名字和描述 . 选择 “Initialize this repository wit ...