C# 插入具有linq到sql的对象列表

C# 插入具有linq到sql的对象列表,c#,linq-to-sql,C#,Linq To Sql,我有一个对象列表,我正在使用linq to sql插入数据库中。 目前,我正在使用一个foreach循环来添加每个元素,大致如下所示: foreach (o in List<MyObjectModel) { using MyDataContext { TheLinqToSqlTableModel TheTable = new TheLinqToSqlTableModel(); TheTable.Fieldname = o.Fieldname; ...

我有一个对象列表,我正在使用linq to sql插入数据库中。 目前,我正在使用一个foreach循环来添加每个元素,大致如下所示:

foreach (o in List<MyObjectModel)
{
  using MyDataContext
  {
     TheLinqToSqlTableModel TheTable = new TheLinqToSqlTableModel();

     TheTable.Fieldname = o.Fieldname;
     .... repeat for each field

     MyDataContext.TheTablename.InsertOnSubmit(TheTable);
     MyDataContext.SubmitChanges();

  }
}

FooCH(O在列表< P>)一些快速改进,考虑…

a) 为什么要为每个迭代创建datacontext

Using(Datacontext dc = new Datacontext())
{
    foreach(...)
    {

    }
   dc.SubmitChanges();
}
b) 为Insert创建存储过程并使用它将有助于提高性能

c) 如果遇到任何错误,请使用事务作用域撤消插入

Using (TransactionScope ts = new TransactionScope())
   {
      dc.SubmitChanges();
   }
List Obj=(输入要传递的列表)
foreach(Obj中的var项目)
{
项目。在点后获取所需的值
}

为什么不使用InsertAllOnSubmit()方法呢

例如:

IEnumerable<Post> _post = getAllNewPost();

 Using(Datacontext dc = new Datacontext())
    {
        dc.Posts.InsertAllOnSubmit(_post);
        dc.SubmitChanges();
     }
IEnumerable\u post=getAllNewPost();
使用(Datacontext dc=newdatacontext())
{
dc.Posts.InsertAllOnSubmit(_post);
dc.提交更改();
}
这就是你所需要的


////////////////////////

+1重用此处的上下文是个好主意。使用存储过程是更好的方法。LINQ不执行批量
插入
/
更新
,因为它确实不打算这么做。明白了:LINQ to sql中没有批量操作;感谢关于重用DC的提示。linq-to-sql将为每个SubmitChanges调用自己添加一个事务,只要您仅在transactionscope无效时调用它。在foreach中使用insert sp也不会将其更改为bulkinsert。在这种情况下,您需要移动到SqlBulkCopy
IEnumerable<Post> _post = getAllNewPost();

 Using(Datacontext dc = new Datacontext())
    {
        dc.Posts.InsertAllOnSubmit(_post);
        dc.SubmitChanges();
     }