Выбор ответа Middle EF Core спрашивают часто обновлено

Время жизни DbContext

Вопрос

Какое утверждение о DbContext верно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Он не потокобезопасен и рассчитан на короткую единицу работы (Scoped). DbContext это единица работы с трекером изменений, он не потокобезопасен: два параллельных запроса через один контекст дают InvalidOperationException.

Варианты ответа

  1. Его лучше регистрировать как Singleton, чтобы не открывать соединения заново
  2. Он не потокобезопасен и рассчитан на короткую единицу работы (Scoped)правильный ответ
  3. Его можно делить между параллельными задачами, если не вызывать SaveChanges разом
  4. Он держит открытое соединение с базой всё время своей жизни, как транзакция

Разбор

DbContext это единица работы с трекером изменений, он не потокобезопасен: два параллельных запроса через один контекст дают InvalidOperationException. Синглтон накопит все сущности в трекере и сломается под конкуренцией. Соединение открывается на время операции и возвращается в пул ADO.NET, поэтому создавать контексты дёшево. Для фоновых задач используют IDbContextFactory<T>.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.