Как вы используете LINQtoSQL с шаблоном хранилища?
Я новичок в L2S и считаю его ленивую загрузку реальным препятствием для использования паттерна репо.
Обычно я думаю о шаблоне хранилища так:
var myCustomer = null;
using (var myRepo = new Repo()){
myCustomer = myRepo.GetCustomerForCustomerId(123);
}
if(myCustomer.Orders.Any()){
//do something
}
Проблема в том, не попытается ли L2S установить соединение для передачи данных при запросе myCustomer.Orders?Не приводит ли это к непредсказуемым проблемам с доступом к базе данных?
Я имею в виду, да, я мог бы сказать своему репо, чтобы он проверял заказы внутри репо, будучи уверенным, что наше полное тестовое покрытие подтверждает, что разработчики никогда не вызывают объект, который мы не загружали явно, но я бы просто избавилсяленивая загрузка / объект-данные-текстовое постоянство.
Итак, у меня есть 4 варианта
- Создание объектов домена, которые создаются из объектов L2S - много работы и сопровождения
- Создание производных версий моего объекта L2S, которыеразорвать связь (http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx)
- Вместо этого используйте LLBLGenPro.
- Обращайтесь к мудрости читателей переполнения стека
Сейчас я собираюсь использовать 4.1025 * Как мне убедиться, что мои объекты не будут вызывать БД после закрытия моего репо?
И да, я прочитал все вопросы стека, в которых говорится о L2S и Repos, и ни один из нихответь на этот вопрос.