EF批量插入(转)】的更多相关文章

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EF批量插入 { class Program { static void Main(string[] args) { TestEntities test = new TestEntities(); DateTime time1 = DateTime…
大概所有的程序员应该都接触过批量插入的场景,我也相信任何的程序员都能写出可正常运行的批量插入的代码.但怎样实现一个高效.快速插入的批量插入功能呢? 由于每个人的工作履历,工作年限的不同,在实现这样的一个需求时,可能技术选型各有不同,有直接生成insert语句的,有用EF的或者其他的orm框架的.其实不管是手写insert还是使用EF,最终交给数据库执行的还是insert语句.下面是EF批量插入的示例代码: var list = new List<Student>(); for (int i =…
距离上次的博客已经有15个多月了,感慨有些事情还是需要坚持,一旦停下来很有可能就会停很久或者从此再也不会坚持.但我个人一直还坚持认为属于技术狂热份子,且喜欢精益求精的那种.最近遇到两个和数据迁移相关的项目,均遇到需要性能优化的问题,这里拿第二个项目的一个小优化过程与大家分享,技术并不高深,我注重的是解决问题的过程.我的方案是有业务背景以及技术背景限制的,不一定适合其它项目,优化是相对的. 业务场景:我们需要迁移一批老的合同订单数据,其有一个合同的订单数为519条,迁移到新表中会涉及到主要的4个表…
EF用原生的插入数据方法DbSet.ADD()和 DbSet.AddRange()都很慢.所以要做大型的批量插入只能另选它法. 1.Nugget 2.代码 using EF6._0Test.EF; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace EF6._0Test { class Program { static void Main(st…
原作者地址http://blog.csdn.net/zlts000/article/details/46385773 之前做项目的时候,做出来的系统的性能不太好,在框架中使用了EntityFramework,于是就在网上查资料,研究如何提高EF的性能. 在这分享一篇博客 批量操作提升EntityFramework的性能 里面提供了一个扩展库Entity Framework扩展库,在这里面找到了一些比较好的方法.下面主要介绍其中的一个方法--批量添加BulkInsert. 这些扩展方法在哪里找?…
https://efbulkinsert.codeplex.com/ https://github.com/loresoft/EntityFramework.Extended…
比较一下下面两种方式的区别 1,每Add一次 就savechange() static void Main(string[] args) { //List<User> users= Find1(u => u.NickName.Contains("luo4")); Stopwatch sw = new Stopwatch(); sw.Start(); using (DB db = new DB()) { for (int i = 0; i < 1000; i++)…
需添加一个using System.Linq; 引用 public void BulkInsert<T>(string connection, string tableName, IList<T> list) { using (var bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.BatchSize = list.Count; bulkCopy.DestinationTableName = tableName; var tab…
Entity Framework是.NET平台下的一种简单易用的ORM框架,它既便于Domain Model和持久层的OO设计,也提高了代码的可维护性.但在使用中发现,有几类业务场景是EF不太擅长的,比如批量写入大量同类数据,为此本人做了一些对比测试,以供大家参考. 现假设我们需要做一个用户批量导入的功能,需要从某处导入1k~1w个User到SQLServer数据库,本人听说过的常见做法有如下几种: 使用ADO.NET单条SqlCommand执行1w次(根据常识作为EF的替代其性能还不够格,所以…
EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率.此种条件下,通常会转回使用 ADO.NET 来完成任务.而EntityFramework.BulkInsert则是利用了Microsoft SQL Server的SqlBulkCopy 接口,实现了批量插入数据时的高效率. 在网上找到两篇相关的帖子,分别是: (1)http://www.cnblogs.com/gaochundong/p/entity_framework_bulk_insert_extension…
Z.EntityFramework.BulkInsert EntityFramework 最被人诟病的地方就是它的性能,处理大量数据时的效率.此种条件下,通常会转回使用 ADO.NET 来完成任务.而EntityFramework.BulkInsert则是利用了Microsoft SQL Server的SqlBulkCopy 接口,实现了批量插入数据时的高效率. 在网上找到两篇相关的帖子,分别是: (1)http://www.cnblogs.com/gaochundong/p/entity_fr…
回到目录 批量插入在EF时代大叔就自己封装过,原理是将多次SQL连接和多次向SQL发送的指令减少到1次,或者1000条数据1次,而对于EF产生的语句来说,这无疑是性能高效的,因为EF这边在处理时,每个语句都会向SQL发送一次,当然就算它是在一个SQL连接里,向SQL发送N多条指令,也是性能低下的. 对于MongoDB来说也是一样,如何减少与Mongo通信的次数,是提高插入操作的前提,还好,官方驱动为我们继承了这个功能,使用WriteModel类型来存储要插入的集合,使用InsertOneMode…
entity framework6.x之前搞了这么多版本,构架这么牛B,居然没有批量插入更新的功能,但有很多替换的解决方案,例如Entity Framework Extended Library(https://github.com/loresoft/EntityFramework.Extended).手工拼接sql语句. 现在微软正在推出core版的ef,它号称比6.x更加轻量级和高效,今天试一下了一下它的批量插入,感觉不错 C#源码: public class BloggingContext…
由于之前面试中经常被问到有关EF的数据批量插入问题,今天以Sqlserver数据库为例,对.net中处理数据批量处理的方案进行了测试对比. 1.四种测试方案 (1)普通的EF数据批量插入:即调用DbSet中的Addrange方法 (2)不进行上下文跟踪的EF数据批量插入:即关闭自调用的DetectChanges方法,不对每一个添加的实体进行扫描 (3)在EF中执行sql批量插入 (4)Ado.net执行sql批量插入 (5)利用sqlserver的Bcp功能作批量插入:代码中利用了SqlBulk…
sql server sqlbulkcopy 批量数据插入数据库使用的是System.Data.SqlClient中的 SqlBulkCopy批量数据插入数据库 sql server 使用SqlBulkCopy批量插入数据库 SqlBulkCopy位于位于命名空间System.Data.SqlClient下,主要功能是把其他数据源(数据行DataRow,数据表DataTable,数据读取器IDataReader等)的数据有效批量的导入到SQL Server表中的功能.类似与 Microsoft…
最近在项目中遇到插入几万.几十万.几百万的数据到MYSQL数据库,使用EF插入会发现插入速度非常慢的场景, 数据量非常大时EF插入需要几十分钟,甚至几个小时,这样子的速度肯定不是我们所期望的. 后面经过了解与研究发现MySqlBulkLoader,可以批量将数据插入到数据库并且速度上面远远优于EF. MySqlBulkLoader主要的实现方式:将需要插入的数据转成DataTable,转成一个CSV文件,将CSV文件使用批量导入的形式导入到数据库里面去. 注意: 1.数据库连接地址需要添加配置A…
一.前言    数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解   其属性如下: parameterType ,入参的全限定类名或类型别名 keyColumn ,设置数据表自动生成的主键名.对特定数据库(如PostgreSQL),若自动生成的主键不是第一个字段则必须设置 keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的…
我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记录的ID的值然后再进行加1运算要少.而如果存在索引的情况下,每次插入记录都会进行索引重建,这是非常耗性能的.如果表中无可避免的存在索引,我们可以通过先删除索引,然后批…
关于 SqlServer 批量插入的方式,前段时间也有大神给出了好几种批量插入的方式及对比测试(http://www.cnblogs.com/jiekzou/p/6145550.html),估计大家也都明白,最佳的方式就是用 SqlBulkCopy.自从LZ把Chloe.ORM开源以后,有不少园友/群友询问,框架怎么批量插入数据.我的回答是不支持!最后建议他们用 SqlBulkCopy 的方式插入.在我们公司,我对 SqlBulkCopy 封装成了一个 Helper 方法,使得批量插入更加方便,…
Mysql 如何批量插入百万行测试数据…
<!--批量插入--> <insert id="batchSave" parameterType="java.util.List"> insert into storage_logistic ( plant_name, location, change_time, num, ebeln, ebelp, zid_po, bwart, elikz, mblnr ) VALUES <foreach collection="list&…
  /*_____________________ List<T>类型数据 To Sql_______________________________*/ /// <summary>        /// Sqlbulkcopies the specified SMS.批量插入到数据库        /// </summary>        /// <param name="data">list类型数据.</param>  …
传入的参数只要是list类型的参数就行了..............1.批量插入<insert id="insertBatch" parameterType="java.util.List"> INSERT INTO T_CITY_INDEX( id,city_code ) select SEQ_CITY_INDEX.NEXTVAL,cd.* from( <foreach collection="list" item="…
批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储到数据库中,而不需要一次一次的向数据库Insert数据. 经过几次实验,百万级别的数据表,也只需几秒时间内就可以完全的存入数据库中,其速度,比传统的Insert into方法不止快很多倍. 下面看代码: /// <summary> /// 批量插入数据 /// </summary> /…
问题描述 今天下午(看现在这时间,应该是昨天下午了哈),园友 choon 写了这样一篇博文<关于有默认值的字段在用EF做插入操作时的思考>. 博文内容主要记录的是 choon 使用 EF 做数据插入与更新时,字段默认值的问题,这个问题我们平常应该都会遇到,但是,最后博文内容包括评论,并没人能给出一个准确的答案,真是很可惜(知识点的博文都是一侃一大堆,而这些实际项目遇到的问题却回答不上来,又有什么用呢,哎...).详细内容请查看上面的博文,这边我再简单叙述下: 数据库有一个 Users 表,表中…
前言 前段时间一直在忙着项目上线,在做项目的同时遇到了一些之前不曾碰到的问题,因为没有经验,只能从网上找一些相关的解决方案,但是网上提供的资料实在是太杂,有的根本不能用,耗时又耗力. 我希望把我这段时间遇到的问题记录下来,去帮助那些当时和我一样“饥渴”的人,以减少时间成本,大家放心,遇到的这些问题提供的解决方案都是经过我们测试,现在正在用的,基本上没什么问题.有什么问题,大家也可以进行探讨,因为问题很多,有些记不起来了,我只能写些可以记起来的分享给大家. 插一句,就是大家在搜问题的时候,尽量用关…
通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下.   其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk insert T_Demo From 'D:\2.txt' With ( fieldterminator=',', rowterminator='\n' ) 1) bulk insert:  为Sql server 中一个批量插入的操作 2)T_Demo:   要插入的表 3)'D:\2.txt':  …
//批量添加20000条数据用时8秒. try {    String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SID    String user = "oracle";    String password = "oracle";    StringBuffer sql = new StringBuffer();    sql.append("insert into e…
原地址 :http://www.cnblogs.com/wangmars/p/3914090.html SQLite,是一款轻型的数据库,被广泛的运用到很多嵌入式的产品中,因为占用的资源非常少,二其中的操作方式几乎和我们接触的数据库不多,甚至只有几百K的他自然会被需求者青睐,下面讲一下在这样的轻型数据库中怎么对他进行一些读写操作. 之前做选择联系人的时候出现如果一个手机里联系人超过2000的话,往数据库里面插入会非常耗时,不同的手机存储的条数不同,这个存储的数量和手机的内存有很大的关系,往往取决…
//EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.DbContext()) { //**********************第一种解决方案 直接使用sql********************** string sqls = ""; ; i < ; i++) { sqls += "sql" + i; } db.…