LINQtoSQL, шаблон репозитория и ленивая загрузка - PullRequest
2 голосов
/ 07 октября 2010

Как вы используете LINQtoSQL с шаблоном хранилища?

Я новичок в L2S и считаю его ленивую загрузку реальным препятствием для использования паттерна репо.

Обычно я думаю о шаблоне хранилища так:

var myCustomer = null;

using (var myRepo = new Repo()){
    myCustomer = myRepo.GetCustomerForCustomerId(123);
}

if(myCustomer.Orders.Any()){
 //do something
}

Проблема в том, не попытается ли L2S установить соединение для передачи данных при запросе myCustomer.Orders?Не приводит ли это к непредсказуемым проблемам с доступом к базе данных?

Я имею в виду, да, я мог бы сказать своему репо, чтобы он проверял заказы внутри репо, будучи уверенным, что наше полное тестовое покрытие подтверждает, что разработчики никогда не вызывают объект, который мы не загружали явно, но я бы просто избавилсяленивая загрузка / объект-данные-текстовое постоянство.

Итак, у меня есть 4 варианта

  1. Создание объектов домена, которые создаются из объектов L2S - много работы и сопровождения
  2. Создание производных версий моего объекта L2S, которыеразорвать связь (http://www.codeproject.com/KB/linq/linq-to-sql-detach.aspx)
  3. Вместо этого используйте LLBLGenPro.
  4. Обращайтесь к мудрости читателей переполнения стека

Сейчас я собираюсь использовать 4.1025 * Как мне убедиться, что мои объекты не будут вызывать БД после закрытия моего репо?

И да, я прочитал все вопросы стека, в которых говорится о L2S и Repos, и ни один из нихответь на этот вопрос.

1 Ответ

1 голос
/ 07 января 2011

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

Фрагмент из ссылки MSDN выше :

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo

Вы также можете использовать DataLoadOptions.AssociateWith для дальнейшей настройки поведения автоматической загрузки.

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