Как я могу остановить автоматически сгенерированный класс Linq to SQL от загрузки ВСЕХ данных? - PullRequest
0 голосов
/ 12 марта 2010

ДУБЛИКАТ из Как я могу остановить автоматически сгенерированный класс Linq to SQL от загрузки ВСЕХ данных? размещать ответы там!

У меня есть проект 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, которые не только показывают, как это сделать, но и предлагают «шаблон» для обычного использования?

1 Ответ

1 голос
/ 12 марта 2010

Учитывая класс Dinner, он не загружает автоматически свойства отношения внешнего ключа. Вы должны настроить параметры загрузки данных, чтобы это работало, например:

var o = new DataLoadOptions();
o.LoadWith<Dinner>(i => i.RSVPs);

Однако каждый раз, когда вы получаете доступ к RSVP, он автоматически загружает их по умолчанию (и если вы переходите к свойству в intellisense, также, к вашему сведению).

НТН.

...