Мы используем EF-контекст в качестве синглтона для http-контекста. Я также не стал бы жестко связывать EF с MVC, но вы все равно можете быть уверены, что каждый http-контекст имеет дело с одним экземпляром EF-контекста с помощью внедрения зависимостей (мы используем Unity).
Мы также обращаемся к контексту в глобальном asax для инициализации и заполнения базы данных для разработки. Опять же, вы можете использовать DI-контейнер для получения экземпляра контекста EF.
public interface IUnitOfWork : IDisposable
{
int SaveChanges();
}
public class MyEfContext : DbContext, IUnitOfWork
{
// your custom context code
}
Использование времени жизни singleton-per-http-context для внедрения зависимостей IUnitOfWork не является подходом, помогающим справиться с параллелизмом в нашем случае. Мы делаем это потому, что при работе с сущностями EF нам нужно убедиться, что все операции выбора, вставки, обновления, удаления всегда выполняются с одним и тем же экземпляром контекста. EF не позволяет вам присоединять сущности к нескольким контекстам, и по этой причине мы используем синглтон для контекста http.