C# 插入具有linq到sql的对象列表
我有一个对象列表,我正在使用linq to sql插入数据库中。 目前,我正在使用一个foreach循环来添加每个元素,大致如下所示: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; ...
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();
}
}
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();
}