Entity Framework и MVC приложения - Как - PullRequest
2 голосов
/ 23 июня 2011

Для нового проекта MVC я планировал изучить и использовать Entity Framework EF4.1.Больше как способ обучения себя с EF, чем по любой другой причине.Многие демонстрации разработчиков Microsoft используют EF в качестве инструмента выбора доступа к данным.

Однако, чем больше я узнаю о EF, тем больше у меня проблем с ним.Например ...

Я хочу сохранить «корзину» моих клиентов в начале процесса оформления заказа.Сохранить корзину в базу данных легко и быстро с помощью EF4.1.Затем я хочу сохранить корзину с помощью различных запросов страниц процесса покупки.Я мог бы использовать EF для сохранения и повторного получения корзины при каждом запросе страницы.Это будет хорошо работать и означать, что у меня есть сохраненная копия корзины на каждом шагу.Тем не менее, это может быть ресурсоемким и замедлить процесс.Поэтому я мог делать то, что я обычно делаю, и сохранять корзину в процессе покупки.Однако тогда у меня есть корзина, которая «отсоединена» от EF, и если в корзину вносятся изменения в процессе покупки, мне нужно каким-то образом вручную синхронизировать корзину сеанса с объектом, сохраненным в моей базе данных.Это может быть довольно трудоемким делом и не похоже на прогресс для меня.

Я просмотрел много постов здесь и различные блоги, и само понятие «Отслеживание сущностей» выглядит так, как будто это может бытьправильная посадка.Но во многих постах здесь говорится, что STE - плохая идея с веб-приложениями.

Итак, учитывая, что многие люди говорят, что EF не является избыточным для веб-приложений, каков наилучший способ справиться с описанным выше сценарием?

Ответы [ 3 ]

2 голосов
/ 23 июня 2011

Однако у меня тогда есть корзина, которая «отсоединена» от EF, и если в корзину вносятся изменения в процессе покупки, мне нужно каким-то образом вручную синхронизировать корзину сеанса с объектом, сохраненным в моей базе данных.

У вас всегда была отдельная корзина, потому что вы создаете новый контекстный экземпляр для каждого запроса, не так ли?Если нет, то вы делаете это неправильно.Совместное использование контекста является антишаблоном.

Вы действительно должны синхронизировать состояние вручную.@RPM имеет хороший пост об этом.

2 голосов
/ 23 июня 2011

Однако тогда у меня есть корзина, которая «отсоединена» от EF, и если в корзину вносятся изменения в процессе покупки, мне нужно каким-то образом вручную синхронизировать корзину сеанса с объектом, сохраненным в моей базе данных

Почему? Это новый объект, так зачем вам синхронизировать? Вам просто нужно добавить его в базу данных. Другими словами, в БД ничего не создается, пока они не подтвердят.

Корзина для покупок идеально подходит для занятий. Глупо сохранять на БД каждую страницу, а потом читать. Потому что, если они нажмут кнопку "Отмена"? Вы собираетесь удалить «неполный» объект?

Сохраните его в сессии, прочитайте из сессии, когда они подтвердят покупку, просто добавьте ее в базу данных:

ctx.Baskets.AddObject(newBasket).

0 голосов
/ 23 июня 2011

Если вы хотите сохранить корзину, если, например, клиент уходит на полпути и возвращается позже (подумайте об Amazon; у меня есть вещи, которые были в моей корзине в течение нескольких месяцев, даже лет), тогда вам нужно хранитькорзина в базе данных, и пользователь должен войти в систему, чтобы это произошло.

Если это так, то вы можете просто извлечь корзину, основываясь на текущем вошедшем в систему идентификаторе пользователя (при условии, что пользователь может иметьтолько одна активная корзина одновременно).Например, вот Дейв, принесите мне корзину Дейва из БД, пожалуйста.О, у него его нет, создай новый.Подобные вещи.

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

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

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