我应该多久创建一个DbContext?

时间:2019-10-17 23:40:54

标签: entity-framework-core ef-core-3.0

是的,有很多类似的问题,但是请听我说。

我有一个场景,我要遍历项目并UpdateAdd。让我们以这个为例

// 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()
}

我的问题是:我应该在循环内还是循环外创建上下文?

1 个答案:

答案 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语句封装它的用法,就像我在示例中所做的那样。