C# 如何正确地插入InsertAllOnSubmit(),这比循环InsertOnSubmit()好吗?
假设我有:C# 如何正确地插入InsertAllOnSubmit(),这比循环InsertOnSubmit()好吗?,c#,linq-to-sql,ienumerable,C#,Linq To Sql,Ienumerable,假设我有: using (SomeDataContext db = new SomeDataContext()) { foreach(Item i in Items) { DbItem d = new DbItem; d.value = i.value; //.... etc ... db.InsertOnSubmit(d); } db.SubmitChanges();
using (SomeDataContext db = new SomeDataContext())
{
foreach(Item i in Items)
{
DbItem d = new DbItem;
d.value = i.value;
//.... etc ...
db.InsertOnSubmit(d);
}
db.SubmitChanges();
}
是否可能和/或更好(更糟?)执行以下操作:
使用(SomeDataContext db=new SomeDataContext())
{
IEnumerable dbItems=//?可能吗?
foreach(项目中的项目i)
{
DbItem d=新的DbItem;
d、 值=i.值;
//……等等。。。
dbItems.Add(d);/?,是否可能?
}
db.InsertAllOnSubmit(数据库项);
db.SubmitChanges();
}
您可以使用列表
:
使用(SomeDataContext db=new SomeDataContext())
{
List dbItems=new List();
foreach(项目中的项目i)
{
DbItem d=新的DbItem;
d、 值=i.值;
//……等等。。。
增加(d);
}
db.InsertAllOnSubmit(数据库项);
db.SubmitChanges();
}
我不知道这是否会更有效。不是说它是好是坏,而是说任何时候你都可以进行单个数据库调用,而不是在循环中调用数据库,你会看到性能的提高。现在.SubmitChanges()
在幕后所做的事情超出了我们的控制。在这里您不会看到任何性能改进,因为在调用SubmitChanges()
之前不会发生任何事情
但即使你做了这么难看的事
foreach(Item i in Items)
{
DbItem d = new DbItem;
d.value = i.value;
//.... etc ...
db.InsertOnSubmit(d);
db.SubmitChanges();
}
我不会期望任何显著的性能下降。这是因为LINQtoSQL执行单数插入
即使使用InsertAllOnSubmit
,您仍然会看到插入的每一行都有一个单独的SQL命令。谢谢,这很有效。我因为说输入类型是IEnumerable而被intellisense拒绝了。
using (SomeDataContext db = new SomeDataContext())
{
List<DbItem> dbItems = new List<DbItem>();
foreach(Item i in Items)
{
DbItem d = new DbItem;
d.value = i.value;
//.... etc ...
dbItems.Add(d);
}
db.InsertAllOnSubmit(dbItems);
db.SubmitChanges();
}
foreach(Item i in Items)
{
DbItem d = new DbItem;
d.value = i.value;
//.... etc ...
db.InsertOnSubmit(d);
db.SubmitChanges();
}