ASP.NET запрашивает ... что делать с Linq DataContext? - PullRequest
4 голосов
/ 05 марта 2010

Извините, если это дубликат. Пожалуйста, укажите мне на соответствующий вопрос, если это так, но я не смог найти именно то, что ищу.

Итак, я использую текст данных Linq to SQL для отслеживания и сохранения сущностей в веб-приложении ASP.NET. Это для интранет-приложения, в котором одновременно нет тонны пользователей. Прямо сейчас я сохраняю текст данных в состоянии сеанса, что заставляет меня чувствовать себя грязным! Кажется, мне нужно, чтобы контекст всегда присутствовал, потому что мне нужно сохранить отслеживание изменений на изменяемых объектах. На всех наших экранах есть кнопка «Сохранить», которая будет вызывать метод SubmitChanges () для DataContext и сохранять все ожидающие изменения в памяти.

Должен ли я хранить DataContext? Должен ли я избавляться от него в конце каждого запроса, а затем как-то воссоздавать его и получать ожидающие изменения? Если бы мне приходилось каждый раз воссоздавать его, я не понимаю, как контекст мог узнать, что изменилось, без тонны избыточных обращений к базе данных по каждому запросу.

Ответы [ 2 ]

4 голосов
/ 05 марта 2010

Во-первых, я бы сказал, чтобы вообще перестать помещать вещи в Сессию. Особенно, если у вас мало пользователей, просто загружайте данные, когда они вам нужны.

Не храните контекст данных вообще. Просто создайте новый на каждой странице, когда вам это нужно. Когда они нажимают кнопку «Сохранить», воссоздают контекст данных, загружают объект из базы данных, вносят необходимые изменения на основе ввода формы, а затем сохраняют его обратно в базу данных. Для каждого объекта должно быть всего два обращения к базе данных: один для загрузки, а затем один для его сохранения.

3 голосов
/ 05 марта 2010

Я думаю, что лучшая практика с контекстом данных - это шаблон «Единица работы», где область действия «Единица работы» - это единственный запрос, который вы обслуживаете. Создавайте новый контекст данных каждый раз, когда вам нужно внести изменения. Если вас беспокоит перезапись изменений, которые были сделаны после рисования предыдущей страницы, подумайте об использовании и сохранении версии / временной метки в скрытом поле и проверяйте ее на соответствие тем, которые были возвращены из контекста данных, при получении сущности для обновления. *

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