【问题标题】:insert Multiple new record in databse asp.net mvc [duplicate]在数据库asp.net mvc中插入多条新记录[重复]
【发布时间】:2017-07-14 18:25:16
【问题描述】:

我有一个非常简单的 ActionResult 函数,从我的视图中调用它并从中接收一个数字,我想在我的数据库中添加这么多与该数字相等的新行,我填写的唯一列是 id它相关的形成,这是我现在的代码

public ActionResult AddInfo(int? idfrm,int? NumberToAdd)
    {
        using (InscriptionFormationEntities dbm = new InscriptionFormationEntities())
        {
            for(int i=0;i<NumberToAdd;i++)
            {
                INSC_MoreInfo NewEntry= new INSC_MoreInfo ();
                NewEntry.idformation = idfrm;
                dbm.INSC_MoreInfo .Add(info);
            }
            dbm.SaveChanges();
        }
            return View(idfrm);
    }

上面的代码完美运行,但我想知道是否有一种方法可以在不依赖 for 循环的情况下达到相同的结果,因为如果要创建的新条目的数量非常大(它可以在这种情况下很好)

**注意:**我的项目是用asp.net mvc 5制作的,我的代码是数据库优先的,我使用实体框架来连接它

【问题讨论】:

  • 为什么会慢?找到做你正在做的事情。
  • @CodingYoshi 因为如果我必须添加 1000000 个新条目,我的循环将创建一个新实例并每次都添加它
  • 您可以用AddRange 调用替换for 循环,但我认为这无关紧要,因为最慢的部分是将记录插入数据库(当您调用SaveChanges 时)因为 EF 不支持批量插入。
  • @IvanStoev 是的,我尝试进行批量插入,但似乎实体框架本身不支持它

标签: c# asp.net-mvc entity-framework asp.net-mvc-5


【解决方案1】:

简短的回答是否定的 - 您无法消除创建 X 个项目的迭代。您可以重写代码以从技术上消除 for 循环,但在幕后您仍然必须使用某种迭代器来创建对象。

只要您只在循环外调用 SaveChanges() 一次,您就不会发现这种方法有任何重大的性能问题。即使您使用 for 循环,这最终会导致一个 SQL 插入语句,该语句将在一次访问数据库中创建所有记录(技术上可能是两次获取版本和事物,但一次用于查询)。

【讨论】:

  • 好的,谢谢你的信息,所以我想这是最好的方法吗?
  • 是的,基本上你所拥有的就是最好的方式
猜你喜欢
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2016-04-25
  • 1970-01-01
相关资源
最近更新 更多