ОБНОВЛЕНИЕ : из того, что я слышу, я представлял проблему, которую описал ниже. Итак, это в значительной степени не вопрос. Будущие читатели, двигайтесь дальше ... здесь нечего видеть.
У меня есть проект ASP.NET MVC, очень похожий на учебный пример NerdDinner . (Я использую MVC 2, но для его создания следовал учебному пособию по NerdDinner).
В соответствии с инструкциями часть 3 данного учебного пособия я создал модель моей базы данных Linq-to-SQL, создав поверхность "Linq to SQL Classes" (.dbml), и сбросив мои таблицы базы данных на него. Дизайнер автоматически добавил связи между сгенерированными классами на основе таблиц моей базы данных.
Допустим, мои классы соответствуют примеру NerdDinner, поэтому у меня есть таблицы Dinner и RSVP, где каждая запись Dinner связана со многими записями RSVP - следовательно, в сгенерированных классах объект Dinner имеет свойство RSVPs, которое является список объектов RSVP.
Моя проблема заключается в следующем : оно появляется (и я с радостью ошибаюсь), что как только я
получить доступ к объекту Dinner, он загружает все соответствующие объекты RSVP, даже если я не использую член RSVP.
Первый вопрос : действительно ли это поведение по умолчанию для сгенерированных классов?
В моей конкретной ситуации граф объектов содержит гораздо больше таблиц (которые имеют на порядок больше записей), и поэтому это катастрофическое поведение - я буду загружать тонны данных, когда все, что я хочу сделать, это показать сведения об одной родительской записи.
Второй вопрос : есть ли какие-либо свойства, предоставляемые через интерфейс дизайнера, которые позволили бы мне изменить это поведение? (Я не могу найти ни одного).
Третий вопрос : я видел описание того, как управлять загрузкой связанных записей в DataContext
с помощью объекта DataShape
, связанного с DataContext. Это то, что я собираюсь сделать, и если да, то есть ли какие-нибудь учебные пособия, такие как NerdDinner, которые не только показывают, как это сделать, но и предлагают «шаблон» для обычного использования?