C# 在数据库asp.net mvc中插入多条新记录

C# 在数据库asp.net mvc中插入多条新记录,c#,asp.net-mvc,entity-framework,asp.net-mvc-5,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,我有一个非常简单的ActionResult函数,从我的视图中调用它,它从中接收一个数字,我想在我的数据库中添加一个新的行,它等于这个数字,我填写的唯一一列是它相关的表单的id,这是我现在的代码 public ActionResult AddInfo(int? idfrm,int? NumberToAdd) { using (InscriptionFormationEntities dbm = new InscriptionFormationEntities())

我有一个非常简单的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);
    }
public ActionResult AddInfo(int?idform,int?NumberToAdd)
{
使用(InjectionFormationEntities dbm=新的InjectionFormationEntities())
{

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


只要在循环外只调用一次SaveChanges(),这种方法就不会出现任何明显的性能问题。即使使用for循环,最终也会生成一条SQL Insert语句,该语句将在数据库的一次访问中创建所有记录(从技术上讲,获取版本和内容可能需要两次,但查询需要一次)。

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


只要在循环外只调用一次SaveChanges(),这种方法就不会出现任何明显的性能问题。即使使用for循环,最终也会生成一条SQL Insert语句,该语句将在数据库的一次访问中创建所有记录(从技术上讲,可能需要两次行程来获取版本和内容,但一次用于查询).

为什么会慢?你正在做的事情很难做到。@CodingYoshi因为如果我必须添加1000000个新条目,我的循环将创建一个新实例,每次都添加它,你可以用
AddRange
调用替换
for
循环,但我认为这与此无关,因为最慢的部分是将记录插入数据库e(当您调用
SaveChanges
时)因为EF不支持大容量插入。@IvanStoev是的,我尝试过大容量插入,但实体框架似乎不支持它。为什么会慢?这是你正在做的事情。@CodingYoshi,因为如果我必须添加1000000个新条目,我的循环将创建一个新实例,每次你可以替换
对于带有
AddRange
调用的
循环,但我认为这不相关,因为最慢的部分是将记录插入数据库(当调用
SaveChanges
时)因为EF不支持大容量插入。@IvanStoev是的,我尝试过大容量插入,但实体框架似乎不支持它nativelyOk谢谢你提供的信息,所以这是最好的方法,我想是的,基本上你所拥有的是最好的方法好的,谢谢你提供的信息,所以这是最好的方法,我想是的,基本上是你拥有的是最好的方式