先说解决办法:使用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. DBCC用法汇总

    本文摘自http://www.cnblogs.com/lilycnblogs/archive/2011/03/31/2001372.html 留作查阅 DBCC是SQL Server提供的一组控制台命 ...

  2. 用T4消除代码重复,对了,也错了

    用T4消除代码重复,对了,也错了 背景 我需要为int.long.float等这些数值类型写一些扩展方法,但是我发现他们不是一个继承体系,我的第一个思维就是需要为每个类型重复写一遍扩展方法,这让我觉得 ...

  3. 免费的Visual Studio的插件

    在做了深入(的)研究之后(通过在google网站搜索),,我编译了15个免费Visual Studio 2005插件表..其中一些插件将提高您(的)代码(的)质量,,另外一些能使您编译(的)更快,,但 ...

  4. php 数组合并方法

    $new = array(); if ($relateddepartmentsnew) { foreach ($relateddepartmentsnew as $relatK=>$relatV ...

  5. php memcached+Mysql(主从)

    /* index.php   程序入口,用来构造sql(如查询,更新) config.php  配置参数(memcache,mysql) init.php    封装memcached操作(memca ...

  6. 手动创建servlet

    1 tomcat/webapps/目录下创建web应用mail.   目录结构如下   tomcat/webapps   |    mail   |    WEB-INF     |        | ...

  7. Spring MVC---数据绑定和表单标签

                                   数据绑定和表单标签 数据绑定 数据绑定是将用户输入绑定到领域模型的一种特性,在Spring MVC的controller和view数据传递 ...

  8. Maven3在Eclipse上安装插件

    eclipse 安装插件的方式最常见的有两种: 1. 一种是在线安装,这貌似是用的最多的,就是:Help -->  Install New Software,然后输入 HTTP 地址来安装,但有 ...

  9. C语言之循环结构 for(二)

    一 for循环的嵌套使用 for循环的嵌套语法: for(int i =0;i<10;i++){ for(int j=0;j<5;j++){ } } 一般用来打印平面,或者控制平面,或者说 ...

  10. 前端学习——ionic/AngularJs——获取验证码倒计时按钮

     按钮功能为:点击"获取验证码"--按钮不可用-设置倒计时-60秒后重新获取. 代码借鉴于:http://plnkr.co/edit/Swj82MpJSix3a47jZRHP?p= ...