asp.net mvc3 код первый (база данных Singleton) - PullRequest
0 голосов
/ 09 декабря 2011

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

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

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

Кто-нибудь думал сделать то же самое? Есть идеи?

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011

Мы используем 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.

0 голосов
/ 09 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...