MVC и Entity Framework, когда удалять объекты Entity - PullRequest
6 голосов
/ 18 мая 2011

Когда вы располагаете объектами Entities объекты контекста в Entity Framework и MVC?

Например, если у меня есть таблица лиц и я выбираю запись в методе контроллера, удаляю ее и возвращаю обратно в мое представление, тогда запись не будет использоваться в представлении.

Должен ли я каким-то образом утилизировать его после обработки моего представления? или не утилизировать его вообще?

Ответы [ 3 ]

1 голос
/ 19 мая 2011

Один из вариантов - создать его в событии начала запроса Global.asax и удалить его в событии конца запроса Global.asax.Каждая страница просто использует эту (сохраненную и полученную в HttpContext.Current.Items или в локальном хранилище потока) без ее утилизации.Это позволяет вашему представлению быть доступным для выполнения отложенной загрузки, но по-прежнему утилизирует его после завершения запроса.

Другой вариант - убедиться, что все необходимое вам уже загружено перед вызовом представления (через .First).(), .ToList () и .Include (свойство), чтобы включить данные свойства навигации) и немедленно избавиться от них.Оба метода работают.

0 голосов
/ 19 мая 2011

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

ЕслиВы поддерживаете свой ObjectContext в течение всего сеанса, вы будете использовать немного больше памяти для каждого пользователя, но вы уменьшите свое приложение для передачи базы данных, и вы сможете накапливать изменения.И сохраните изменения сразу.Поскольку EF реализует Identity Pattern, вы не будете загружать несколько копий одного и того же объекта.

В противном случае, если вы утилизируете ObjectContext, это уменьшит память, но увеличит накладные расходы на загрузку объектов снова и снова.Возможно, вы снова и снова загружаете несколько копий одного и того же объекта в представлениях и увеличиваете нагрузку на сервер базы данных.

0 голосов
/ 18 мая 2011

Я предполагаю, что вы говорите об удалении Entity Framework "Контекстов", поскольку сами объекты не являются одноразовыми.

Мы решили, что лучше всего оставить сами сущности в нашем слое данных и отобразить их в POCO / DTO, которые содержат всю информацию, необходимую для данного представления. Таким образом, мы не пытаемся загружать данные лениво во время отображения нашего представления. Мы оборачиваем код доступа к данным в using(var context = contextFactory.Get()), чтобы контекст автоматически удалялся до завершения метода, но после загрузки всех данных, которые мы извлекаем, в коллекцию в памяти.

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