首页 > 解决方案 > 我应该多久创建一次 DbContext?

问题描述

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

我有一个场景,我迭代项目和其中一个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()
}

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

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

解决方案


应该尽可能少地创建,并且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 语句封装它的使用,就像我在示例中所做的那样。


推荐阅读