LINQ to SQL Отложенная загрузка - PullRequest
2 голосов
/ 10 июля 2009

DBML

У меня есть следующие сущности в моем dbml: (составлено для примера)

Book <- Media -> AuthorsForMedia <- Author

Стрелки - это отношения в моем БД.

Книга - это тип носителя, и экземпляр книги имеет свойство носителя со значениями, общими для всех носителей в нем. AuthorsForMedia - это пересекающаяся таблица с AuthorId, MediaId и AuthorsForMediaId.

Запрос

Мой запрос на получение в моем хранилище:

public Book Get(int id)
{
    var query = from b in db.Books
                where b.BookId == id
                select b;

    return query.Single();
}

Полученный объект имеет установленные свойства книги и свойство media со всеми его значениями.

Когда я смотрю на AuthorsForMedia в диалоге Watch во время отладки, устанавливаются следующие значения:

Count = 0 
HasLoadedOrAssignedValues = false
IsDeferred = false

Вопрос 1

Почему значения для AuthorsForMedia (а затем и соответствующего ему свойства Author) не могут быть оценены с отложенной загрузкой?

Вещи, которые я пытался

Прочитав этот вопрос:

Я пытался использовать DataLoadOptions с LoadWith / AssoicateWith, и он не работал. Я закончил с ошибками вроде

  • Невозможно создать экземпляр класса Foo Ошибка: System.NotSupportedException: подзапрос не поддерживается на носителе типа Book
  • ... System.InvalidOperationException: указанное выражение должно иметь форму p.A, где p - параметр, а A - свойство или член поля
  • Или значения просто не было

Я могу предоставить фрагменты кода для всего этого, если это поможет, но я думаю, что это концептуальный вопрос, а не синтетический.

Резюме

Как мне получить эти значения, левое соединение или что-то еще, чего я до сих пор не нашел?

Ответы [ 2 ]

3 голосов
/ 16 июля 2009

Вот так должен выглядеть LoadWith.

DataLoadOptions dlOptions = new DataLoadOptions();
dlOptions.LoadWith<Books>(book => book.AuthorsForMedia);
db.LoadOptions = dlOptions;
1 голос
/ 13 июля 2009

DataLoadOptions и LoadWith () - это то, что вам нужно.

Как вы их называете?

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