Нет, ИМО. В частности, я довольно чист, поэтому я не думаю, что мой пользовательский интерфейс должен иметь что-либо , связанное с доступом к данным. Это работа класса репозитория. Класс репозитория также не должен иметь ничего общего с http-запросом.
Таким образом, при разделении интересов единственный логический ответ здесь - «нет».
Re быть дорогим (комментарии); на самом деле он получает стоимость, чем дольше вы его используете:
- объект / личность трекер будет медленно накапливать каждую уникальную запись, которую вы выбираете
- отслеживание изменений имеет больше работы для мониторинга
- у вас гораздо больше шансов на устаревшие (устаревшие) записи (получение неправильных данных - определенная стоимость)
И, позволяя ему жить за пределами DAL, вы также должны беспокоиться о многопоточности (это особенно верно для веб-запросов, где вы можете получить все сортов интересных комбинаций запросов для одного и того же сессия).
LINQ-to-SQL не предлагает много кеша; он имеет ограниченную поддержку для поиска идентификаторов при коротком замыкании в диспетчере идентификации (поэтому, если вы запросите Single(x=>x.Id == 12345)
, и он увидит запись 12345
, он не попадет в базу данных). Тем не менее, большую часть времени он попадет в базу данных. И что касается базы данных, одной из самых больших затрат является стоимость новых соединений; что очень эффективно (для веб-приложений) смягчается пулами соединений на SqlConnection
.