Как часто мне следует создавать DbContext? - PullRequest
1 голос
/ 18 октября 2019

Да, есть много похожих вопросов, но выслушайте меня.

У меня есть сценарий, в котором я перебираю элементы и либо 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()
}

Мой вопрос: должен ли я создавать контекст внутри или вне цикла?

1 Ответ

1 голос
/ 18 октября 2019

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, как ясделано в моем примере.

...