先说解决办法:使用SqlBulkCopy。

然后问题是:这个和EF没有半点关系,还要拼DataSet。

再是解决办法:你可以自己封装一个,也可以使用人家写好的 EntityFramework.BulkInsert  (https://efbulkinsert.codeplex.com/ )。 看了一下代码, 里面就是用SqlBulkCopy实现的。

使用起来也很简单:

            Stopwatch sw = Stopwatch.StartNew();
var cx = new RETestEntities(); var entitys = new List<Staff>(); for (var i = 0; i < 100000; i++)
{
entitys.Add(new Staff()
{
StaffID = i,
StaffName = "name" + i
});
} cx.BulkInsert(entitys);
//cx.Staff.AddRange(entitys); //4674, 4664
cx.SaveChanges();
Console.WriteLine(sw.ElapsedMilliseconds); //1495, 910
Console.Read();

性能对比:

插入十万数据(虽然只有两列), 第一次1495ms,第二次910ms

顺便看了一下原生的, 十万实在是等不了了,改成一千,需要 4674ms , 4664ms

另外,网上看有人说,可以设置

cx.Configuration.AutoDetectChangesEnabled = false;
cx.Configuration.ValidateOnSaveEnabled = false;

不过,我试了,没用,不知道是不是姿式不对。

需要注意的是:

这个扩展,不支持事务在外面提交,它的代码是这样的:

                    try
{
Run(entities, transaction);
transaction.Commit();
}
catch (Exception)
{
if (transaction.Connection != null)
{
transaction.Rollback();
}
throw;
}

自动就commit了,如果有需要外面提交,可能就要修改源代码了, 网站上都有得下。

另外,就算自己实现也不是很复杂,就是实现了SQL的批量Insert。

EntityFramework批量Insert的更多相关文章

  1. java批量insert入mysql数据库

    mysql 批量insert语句为 insert into Table_(col1,col2...) values(val11,val12...),(val11,val12...),...; java ...

  2. JDBC批量Insert深度优化(有事务)

    环境: MySQL 5.1 RedHat Linux AS 5 JavaSE 1.5 DbConnectionBroker 微型数据库连接池   测试的方案: 执行10万次Insert语句,使用不同方 ...

  3. springboot-mybatis 批量insert

    springboot mybatis 批量insert 操作 直接上代码: 1.首先要在pom.xml中导入包: 略...... 2.springboot mybatis配置: package com ...

  4. oracle+mybatis 使用动态Sql在要insert的字段不确定的情况下实现批量insert

    最近做项目遇到一个挺操蛋的问题,由于业务的关系,DB的数据表无法确定,在使用过程中字段可能会增加,这样在insert时给我造成了很大的困扰. 先来看一下最终我是怎么实现的: <insert id ...

  5. Mybatis批量insert 返回主键值和foreach标签详解

    Mybatis批量insert 返回主键 Mybatis从3.3.1版本开始,支持批量插入后返回主键ID.首先对于支持自增主键的数据库使用useGenerateKeys和keyProperty,对于不 ...

  6. Mybatis + Oracle 批量insert的问题

    这个问题真的太坑了 之前用ibatis+sql server 的foreach 很容易就写出来批量insert数据,但是测试后报错:SQL结束格式错误 现在换到银行工作,数据库也换成Oracle了 特 ...

  7. mysql 批量 insert 数据丢失问题

    这两天发现mysql 批量insert 比如600条数据后,页面马上select就查询到580条,但是等几秒钟再查询就有600条(也有部分情况是永久只能查到580条了) 查看mybatis的日志发现循 ...

  8. Mybatis批量insert报错的解决办法【the right syntax to use near '' at line...】

    Java中使用Mybatis批量插入数据时Mapper.xml中的sql如下: <insert id="batchSave"> into t_emp(emp_name, ...

  9. mysql批量insert速度超慢

    在进行大批量数据insert的时候,我使用的是hibernate的进行save,而数据库采用mysql.但是在save的时候,速度很慢.         刚开始以为是MYSQL进行DNS解析的问题,于 ...

随机推荐

  1. iOS 开发之Target-action模式

    Target-action:目标-动作模式,它贯穿于iOS开发始终.但是对于初学者来说,还是被这种模式搞得一头雾水. 其实Target-action模式很简单,就是当某个事件发生时,调用那个对象中的那 ...

  2. this关键字、访问修饰符、super关键字

    this关键字.访问修饰符.super关键字 Java关键字this只能用于方法方法体内,而且只能用在非静态方法内.当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个 ...

  3. VS2012下基于Glut OpenGL glEdgeFlag示例程序:

    glEdgeFlag (GLboolean flag)表示一个顶点是否应该被认为是多边形的一条边界边的起点.flag为GL_TRUE后面的点都被认为是边界上的点,flag为GL_FALSE则之后的点不 ...

  4. dd命令详解

    一.dd命令的解释. dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾则乘以相应的数字:b=512:c=1:k=1024:w=2 参数: 1. i ...

  5. NodeJS stream 一:Buffer

    当年是看了朴灵的九浅一深 NodeJS 入门的 Node, 朴大大的书讲实践很少更多的篇幅用在了讲原理上,道理听了那么多,后来开始在前端工程领域使用 NodeJS 却处处掣肘,总结原因发现 NodeJ ...

  6. ActiveMQ NMS使用过程中的一点经验

    最近,项目中使用到了ActiveMQ获取第三方推送过来的数据.具体背景是:公司需要监控全国各地车辆实时运行的GPS数据,但监控本身不是公司做的,而是交给第三方公司做,第三方采集GPS数据后推送给我们. ...

  7. Js-Html 前端系列--可伸缩菜单

    一个非常经典的Demo,自行开发可以扩展. <head> <title></title> <style type="text/css"&g ...

  8. 官网.jar包下载技巧

    最近在学Java,但是往往要用到好多jar包,只能从网上下载,但是网上找实在太费事了,而且有时候给我们带来了许多的不便.找不到jar包程序就运行不了,心里真不是个滋味.可是自己就是不甘心.经过我的不懈 ...

  9. 驱动05.lcd设备驱动程序

    参考s3c2410fb.c总结出框架 1.代码分析 1.1 入口函数 int __devinit s3c2410fb_init(void) { return platform_driver_regis ...

  10. 【APEX初步】【2】【sObjects与数据库】

    由于apex是与数据库集成的.我们可以直接用apex访问数据库.每条记录就是一个SObject对象