zoukankan      html  css  js  c++  java
  • EntityFramework批量Insert

    先说解决办法:使用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。

  • 相关阅读:
    产品经理职责
    Python基础知识之:字符串拼接
    Python基础知识之:hello world,注释,变量,数据类型
    Python初接触
    系统测试基础大纲
    编程零基础应当如何开始学习 Python?
    可以用 Python 编程语言做哪些神奇好玩的事情?
    江湖二三事:听说你想做数据分析师?
    “羊车门”问题
    用Turtle画正螺旋线
  • 原文地址:https://www.cnblogs.com/wileywong/p/6278889.html
Copyright © 2011-2022 走看看