zoukankan      html  css  js  c++  java
  • EF实现批量插入

    Z.EntityFramework.BulkInsert

    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 = 0; i < 10000;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}
    ", sw.ElapsedMilliseconds);
                Response.Write(sb.ToString());
    复制代码

    实测执行结果:插入一万条数据的执行时间为:1742毫秒,不到两秒的时间,执行结果相对满意。

    注:EntityFramework.BulkInsert不支持关联表数据插入,以关联方式批量插入数据时会出错。

    本文转自:https://www.cnblogs.com/superfeeling/p/6382193.html

  • 相关阅读:
    【转载】Linux 内存管理机制
    【学习笔记】cache/buffer
    【错误记录】PowerShell 超级无语的语法错误(令人怀疑人生)
    【Ansible 文档】【译文】模版(Jinja2)
    【Ansible 文档】【译文】Playbooks 变量
    【Ansible 文档】提示、推荐、注意事项
    【Ansible 文档】【译文】网络支持
    银行卡算法规则
    网站优化:浏览器缓存控制简介及配置策略
    学习一份百度的项目目录结构规范
  • 原文地址:https://www.cnblogs.com/Vam8023/p/8985716.html
Copyright © 2011-2022 走看看