Выбор ответа Middle EF Core спрашивают часто обновлено
Время жизни DbContext
Вопрос
Какое утверждение о DbContext верно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Он не потокобезопасен и рассчитан на короткую единицу работы (Scoped). DbContext это единица работы с трекером изменений, он не потокобезопасен: два параллельных запроса через один контекст дают InvalidOperationException.
Варианты ответа
- Его лучше регистрировать как Singleton, чтобы не открывать соединения заново
- Он не потокобезопасен и рассчитан на короткую единицу работы (Scoped)правильный ответ
- Его можно делить между параллельными задачами, если не вызывать SaveChanges разом
- Он держит открытое соединение с базой всё время своей жизни, как транзакция
Разбор
DbContext это единица работы с трекером изменений, он не потокобезопасен: два параллельных запроса через один контекст дают InvalidOperationException. Синглтон накопит все сущности в трекере и сломается под конкуренцией. Соединение открывается на время операции и возвращается в пул ADO.NET, поэтому создавать контексты дёшево. Для фоновых задач используют IDbContextFactory<T>.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.