我有一个非常简单的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中制作的,我的代码是数据库优先,我使用Entity框架连接它
答案 0 :(得分:3)
简短的回答是否定的 - 你无法消除迭代来创建X个项目。您可以重写代码以在技术上消除for循环,但在幕后,您仍然必须使用某种迭代器来创建对象。
只要您在循环外部只调用SaveChanges(),就不会发现此方法存在任何重大性能问题。即使你使用for循环,这最终会产生一个SQL Insert语句,它将在一次数据库中创建所有记录(技术上可能是两次获取版本和事物,但一次用于查询)。