Платформа объекта - Как я должен инстанцировать свой объект “Объектов”

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

Теперь Вы говорите мне, сколько пользователей Вы соединились.

18
задан Daniel Magliola 9 September 2009 в 18:36
поделиться

2 ответа

Сам контроллер реализует IDisposable. Таким образом, вы можете переопределить Dispose и избавиться от чего-либо (например, контекста объекта), которое вы инициализируете при создании экземпляра контроллера.

Контроллер живет только до тех пор, пока один запрос. Таким образом, использование using внутри действия и наличие одного контекста объекта для всего контроллера - это точно такое же количество контекстов: 1.

Большая разница между этими двумя методами состоит в том, что действие будет завершено до того, как представление будет отрисовано. Поэтому, если вы создаете свой ObjectContext в операторе using внутри действия, ObjectContext будет удален до того, как представление будет отображено. Так что вам лучше прочитать что-нибудь из контекста, что вам нужно, до завершения действия. Если модель, которую вы передаете в представление, представляет собой какой-то ленивый список, например IQueryable, вы удалите контекст до того, как представление будет отрисовано, что вызовет исключение, когда представление пытается перечислить IQueryable.

Напротив, если вы инициализируете ObjectContext при инициализации контроллера (или пишете ленивый код инициализации, вызывающий его инициализируется при запуске действия) и удалите ObjectContext в Controller.Dispose, тогда контекст все еще будет присутствовать при рендеринге представления. В этом случае можно безопасно передать IQueryable в представление. Контроллер будет удален вскоре после рендеринга представления.

Наконец, было бы упущением, если бы я не указал, что, вероятно, было бы плохой идеей, чтобы ваш Контроллер вообще знал о Entity Framework. Рассмотрите возможность использования отдельной сборки для вашей модели и шаблона репозитория, чтобы контроллер взаимодействовал с моделью.

22
ответ дан 30 November 2019 в 08:33
поделиться

Вы делаете хорошее замечание. Как долго должен жить ObjectContext? Все шаблоны и практические книги (например, Microsoft-NET-Architecting-Applications Дино Эспозито ) говорят вам, что DataContext не должен жить долго и не должен быть кэширован.

Мне просто интересно, почему бы не иметь, в вашем случае, класс ControllerBase (я не знаю реализации MVC, так что потерпите меня), где ObjectContext инициализируется один раз для всех контроллеров. Особенно подумайте о Identity Map Pattern, который уже реализован в Entity Framework. Несмотря на то, что Вам необходимо вызвать другой контроллер в качестве Вашего PostsController, он все равно будет работать с тем же самым Context и улучшит производительность.

.
3
ответ дан 30 November 2019 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: