asp.net mvc3 Code First (база данных Singleton)

Я работаю над asp.net mvc, сначала используя код. Я заметил, что как только я создаю новый контроллер, шаблон контроллера показывает переопределенный метод удаления, который имеет только одно задание; dispose db переменная, созданная в верхней части этого контроллера.

Я думаю изменить это, чтобы использовать одноэлементный шаблон с моим классом DBContext.

Я попробовал это, и это сработало нормально. за исключением того, что мне иногда нужно было получить доступ к базе данных из global.asax. (иногда) выдает исключение.

Кто-нибудь думал сделать так же? Любые идеи?

Спасибо


person IoC    schedule 09.12.2011    source источник


Ответы (2)


лично я бы придерживался совершенно другого подхода, см. мой ответ здесь: https://stackoverflow.com/a/7474357/559144 Я бы не стал использовать Singleton и не стал бы жестко связывать MVC, который является фреймворком пользовательского интерфейса, с DAL (EF в вашем случае).

о том, чтобы не использовать синглтон, пусть база данных обрабатывает параллелизм; это одна из вещей, которую серверы баз данных делают лучше всего ;-)

person Davide Piras    schedule 09.12.2011

Мы используем контекст EF как синглтон для контекста http. Я также не стал бы жестко связывать EF с MVC, но вы все равно можете быть уверены, что каждый контекст http имеет дело с одним экземпляром контекста EF, используя внедрение зависимостей (мы используем Unity).

Мы также получаем доступ к контексту в глобальном asax для инициализации базы данных и заполнения для разработки. Опять же, вы можете использовать контейнер внедрения зависимостей для получения экземпляра контекста EF.

public interface IUnitOfWork : IDisposable
{
    int SaveChanges();
}

public class MyEfContext : DbContext, IUnitOfWork
{
    // your custom context code
}

Использование времени жизни singleton-per-http-context для внедрения зависимостей IUnitOfWork не является подходом, помогающим справиться с параллелизмом в нашем случае. Мы делаем это, потому что при работе с сущностями EF нам нужно убедиться, что все выборки/вставки/обновления/удаления всегда происходят с одним и тем же экземпляром контекста. EF не позволяет присоединять объекты к нескольким контекстам, и по этой причине мы используем синглтон для контекста http.

person danludwig    schedule 09.12.2011