Общий подход - использование одного контекста на запрос Http. Этот контекст используется всеми вашими службами, потому что если службы в рамках обработки одного запроса вызывают друг друга, они, скорее всего, работают в одной единице работы. Если они не работают в одной единице работы, вам может понадобиться новый контекст для каждой единицы работы.
Вторая проблема с объектами, хранящимися в сеансе, не связана с созданием контекста. Это связано с тем, что вы сохранили прокси-объект в сеансе, не отрывая его от контекста. Чтобы решить эту проблему, вы должны либо:
- Отключение сущности, хранящейся в сеансе, перед удалением контекста, который использовался для загрузки сущности (или там, где сущность была присоединена во время сохранения). Это можно сделать с помощью
context.Entry(entity).State = EntityState.Detached
- Отключить создание прокси для сущностей, сохраненных в сеансе, с помощью
context.Configuration.ProxyCreationEnabled = false