For循环使用InsertOnSubmit() - 在循环内部或外部的SubmitChanges()

时间:2013-05-23 17:46:01

标签: c# .net linq

编辑别人的代码,我想知道在使用for循环和InsertOnSubmit时,是否在循环内部或外部调用了submitchanges。

即:

foreach (string t in newTags)
{
   Tag q_tag = new Q_Tag();
   q_tag.Q_ID = updated.Q_ID;
   q_tag.Tag_Name = t;
   TheData.Q_Tags.InsertOnSubmit(q_tag);
   TheData.SubmitChanges();         
}

相反:

foreach (string t in newTags)
{
   Tag q_tag = new Q_Tag();
   q_tag.Q_ID = updated.Q_ID;
   q_tag.Tag_Name = t;
   TheData.Q_Tags.InsertOnSubmit(q_tag);     
}

TheData.SubmitChanges();

3 个答案:

答案 0 :(得分:2)

为数据库打开一个新连接,并在第一个函数调用结束时关闭。在第二个代码中,在所有操作之后打开和关闭单个连接。第二个比第一个快得多。您可以稍后自己尝试,但我的测试显示速度变化率接近30%。

答案 1 :(得分:0)

你可以这样做。阅读MSDN中的这篇简短的文章http://msdn.microsoft.com/en-us/library/bb399378.aspx你应该在循环之外做这个,所以你只做一次。这应该是最好的表现。

答案 2 :(得分:0)

我会说在循环之外。来自DataContext.SubmitChanges MSDN entry

  

计算要插入,更新或修改的修改对象的集合   删除,并执行适当的命令来实现   更改数据库。

因此,考虑到这一点,在循环之外执行它会更有效,因为该方法将通过一次调用插入所有对象。