是的,有很多类似的问题,但是请听我说。
我有一个场景,我要遍历项目并Update
或Add
。让我们以这个为例
// var ctx = ctxFactory.Get();
foreach(var book in cart)
{
// var ctx = ctxFactory.Get();
var dbBook = ctx.Books.FirstOrDefault(p => p.ISBN == product.ISBN);
if (dbBook == null)
{
ctx.Add(book);
}
else
{
dbBook.Excerpt = book.Excerpt;
ctx.Update(dbBook);
}
ctx.SaveChanges()
}
我的问题是:我应该在循环内还是循环外创建上下文?
答案 0 :(得分:1)
创建DbContext
的次数应尽可能少,并且应尽可能重用。
也就是说,我认为这就是您要寻找的东西:
using (var ctx = ctxFactory.Get())
{
var dbBook = ctx.Books.FirstOrDefault(p => p.ISBN == product.ISBN);
foreach (var book in cart)
{
if (dbBook == null)
{
ctx.Add(book);
}
else
{
dbBook.Excerpt = book.Excerpt;
ctx.Update(dbBook);
}
}
ctx.SaveChanges();
}
由于它是可抛弃的对象,因此您应该始终对其进行处理或使用using语句封装它的用法,就像我在示例中所做的那样。