【发布时间】:2012-11-28 20:09:59
【问题描述】:
我有一些代码用于插入一些不起作用的行:
using (MyDbContext context = new MyDbContext()) {
foreach (Order o in FormOrders) { //That's a List<T> that got generated based on a web form
context.Orders.Add(o);
}
context.SaveChanges();
}
我终于想出了如何让它工作:
foreach (Order o in FormOrders) {
context.Orders.Add(o);
context.SaveChanges();
}
但是,我意识到这不是很有效。诚然,一次插入的订单最多约为 40 个,但我仍然对尽可能多地使用最佳实践感兴趣。
我猜代码片段 #1 不起作用,因为 o 超出了调用 SaveChanges() 的范围,但我不明白它是如何工作得足够好来确定的,我绝对不了解它以找出更好的方法。
另外,我听说您应该为每一行使用一个新的 DbContext 实例,在上述情况下实现效率会更低。这是真的吗?
编辑
忽略这个问题。两个版本似乎都有效。我不知道是什么问题。我不会删除它,因为其他人可能会发现某些 cmets/answers 有用。
【问题讨论】:
-
在
foreach语句之后将o设置为临时变量,然后将临时变量添加到context.Orders集合中会发生什么情况?如果您在foreach循环之外调用SaveChanges(),它会保存吗? -
您遇到了什么错误?你的第一个 sn-p 的第一行应该是
using (MyDbContext context = new DbContext()) {吗? -
没关系。也许我疯了。代码#1 现在似乎可以工作了。我发誓我昨天一整天都试过了,绝对没有插入任何东西。它从来没有抛出任何错误,只是什么也没做。还有@AntP,我的
using是正确的。
标签: asp.net sql-server asp.net-mvc database entity-framework