使用Linq-to-SQL插入对象列表

3

我有一个对象列表,使用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();

  }
}

有没有更好的方法使用Linq-to-SQL将对象列表插入到数据库中?
感谢您的建议。
3个回答

3
为什么不使用InsertAllOnSubmit()方法。
示例:
IEnumerable<Post> _post = getAllNewPost();

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

这就是你需要的全部内容。

2

一些快速的改进建议:

a) 为什么要在每次迭代中创建数据上下文?

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

    }
   dc.SubmitChanges();
}

b) 创建一个存储过程用于插入数据,并使用它可以提高性能。

c) 如果遇到任何错误,使用事务范围来撤消插入操作。

Using (TransactionScope ts = new TransactionScope())
   {
      dc.SubmitChanges();
   }

+1 在这里重复使用上下文是一个好主意。使用存储过程是更好的选择。LINQ 并不擅长批量 INSERT/UPDATE,因为它并不是为此而设计的。 - Yuck
明白了:LINQ to SQL 中没有批量操作;感谢您关于重复使用 DC 的提示。 - frenchie
linq-to-sql每次调用SubmitChanges时都会自动添加一个事务,因此只要您仅调用一次,transactionscope就是无用的。此外,在foreach中使用insert sp也不会将其更改为bulkinsert。在这种情况下,您需要转移到SqlBulkCopy。 - Pleun

0
List<Object> Obj = (Enter the List you want to pass)

foreach (var item in Obj)
{
    item.Get your desired value after the dot
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接