EntityFramework批量Insert

时间:2022-11-01 19:35:43

先说解决办法:使用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&plus;mybatis 使用动态Sql在要insert的字段不确定的情况下实现批量insert

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

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

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

  6. Mybatis &plus; 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 &&num;39&semi;&&num;39&semi; at line&period;&period;&period;】

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

  9. mysql批量insert速度超慢

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

随机推荐

  1. atitit&period;常用编程语言的性能比较 c c&plus;&plus; java

    atitit.常用编程语言的性能比较 c c++ java 选择一个什么样的程序问题进行这样的测试呢?这是一个很关键的问题,也最容易影响测试的公平性.另外的,对于每种语言,各自的优势都是不同的 #-- ...

  2. 移动APP服务端API设计应该考虑到的问题

    2014年,移动APP的热度丝毫没有减退,并没有像桌面软件被WEB网站那样所取代, 不但如此,越来越多的传统应用.网站也都开始制作自己的移动APP,也就是我们常说的IOS客户端.android客户端. ...

  3. Android的配置界面PreferenceActivity

    我想大家对于android的系统配置界面应该不会陌生吧,即便陌生,那么下面的界面应该似曾相识吧,假若还是不认识,那么也没有关系,我们这一节主要就是介绍并讲解android 中系统配置界面的使用,相信大 ...

  4. FMX相当于在界面上自己又做了一个小操作系统

    FMX的自画界面我也不看好,比如复制粘贴,太丑了,系统做得很好很精细的复制粘贴界面,就是无法调出,比如MIUI,复制粘贴还能有个放大镜,可以选择到屏幕边缘的文字,可以选择剪贴板内多个可粘贴的文字:还有 ...

  5. IM-iOS退出后台接受消息,app退出后台能接收到推送

    App被失活状态的时候可以走苹果的APNS:但是在活跃的时候却接受不到推送! 那就用到本地推送:UILocalNotification 消息神器. 处理不好可能会有很多本地推送到来,那么问题来了要在什 ...

  6. idea 整合ssm 启动页404问题

  7. iOS 二维码 学习

    这段时间忙着交接工作,找工作,找房子,入职,杂七杂八的,差不多一个月没有静下来学习了.这周末晚上等外卖的时间学习一下二维码的制作与扫描. 项目采用OC语言,只要使用iOS自带的CoreImage框架, ...

  8. Markdown学习(一)

    先从了解开始. 1 什么是标记语言(Markup Language)? 可以参考下wiki Markup language:https://en.wikipedia.org/wiki/Markup_l ...

  9. 03&lowbar;netty实现聊天室功能

    [概述] 聊天室主要由两块组成:聊天服务器端(ChatRoomServer)和聊天客户端(ChatClient). [ 聊天服务器(ChatRoomServer)功能概述 ] 1.监听所有客户端的接入 ...

  10. 8&period;Redis 数据备份与恢复

    转自:http://www.runoob.com/redis/redis-tutorial.html Redis SAVE 命令用于创建当前数据库的备份. 语法 redis Save 命令基本语法如下 ...