LINQ to SQL Отложенная загрузка

2

DBML

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

Book <- Media -> AuthorsForMedia <- Author

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

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

Query

Мой запрос в моем репозитории:

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

    return query.Single();
}

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

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

Count = 0 
HasLoadedOrAssignedValues = false
IsDeferred = false

Вопрос 1

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

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

После прочтения этого вопроса:

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

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

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

Резюме

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

Теги:
linq-to-sql
lazy-loading
deferred-loading

2 ответа

3
Лучший ответ

Вот как выглядит LoadWith.

DataLoadOptions dlOptions = new DataLoadOptions();
dlOptions.LoadWith<Books>(book => book.AuthorsForMedia);
db.LoadOptions = dlOptions;
1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню