DataLoadOptions Класс

Определение

Обеспечивает немедленную загрузку и фильтрацию связанных данных.

public ref class DataLoadOptions sealed
public sealed class DataLoadOptions
type DataLoadOptions = class
Public NotInheritable Class DataLoadOptions
Наследование
DataLoadOptions

Примеры

При извлечении Customers из примера базы данных Northwind можно указать DataLoadOptions , что Orders также требуется извлечь. Можно даже указать, какой подмножество Orders извлекается.

Комментарии

Класс DataLoadOptions обеспечивает немедленную загрузку и фильтрацию связанных данных.

При запросе к объекту фактически извлекается только запрошенный объект. Связанные объекты одновременно не извлекаются автоматически. Для получения дополнительной информации см. раздел «Запросы по связям».

Класс DataLoadOptions предоставляет два метода для немедленной загрузки указанных связанных данных. Этот LoadWith метод позволяет немедленно загружать данные, связанные с основным целевым объектом. Этот AssociateWith метод позволяет фильтровать связанные объекты.

Правила

Рассмотрим следующие правила использования DataLoadOptions :

  • Назначение первому DataLoadOptionsDataContext запросу после выполнения первого запроса создает исключение.
  • Изменение DataLoadOptions после назначения DataContext исключения.

Обработка циклов

LoadWith и AssociateWith директивы не должны создавать циклы. Ниже приведены примеры таких графов:

  • Пример 1. Самокурсивный

    • dlo.LoadWith<Employee>(e => e.Reports);
  • Пример 2. Указатели назад

    • dlo.LoadWith <Customer>(c => C.Orders);
    • dlo.LoadWith <Order>(o => o.Customer);
  • Пример 3. Более длинные циклы

    Хотя это не должно происходить в хорошо нормализованной модели, это возможно.

    • dlo.LoadWith <A>(a => a.Bs);
    • dlo.LoadWith <B>(b => b.Cs);
    • dlo.LoadWith <C>(c => c.As);
  • Пример 4. Самокурсивный вложенный запрос

    • dlo.AssociateWith<A>(a=>a.As.Where(a=>a.Id=33));
  • Пример 5. Более длинные рекурсивные вложенные запросы

    • dlo.AssociateWith<A>(a=>a.Bs.Where(b=>b.Id==3));
    • dlo.AssociateWith<B>(b=>b.As.Where(a=>a.Id==3));

Следующие общие правила помогают понять, что происходит в следующих сценариях:

  • LoadWith: каждый вызов проверки того, LoadWith были ли в графе введены циклы. Если есть, как в примерах 1, 2 и 3, создается исключение.

  • AssociateWith: во время выполнения обработчик не применяет существующие предложения SubQuery к связи внутри выражения.

    • В примере 4 Where предложение выполняется для всех A, а не только отфильтрованных выражением SubQuery (так как это будет рекурсивным).
    • В примере 5 первое Where предложение применяется ко всем Bфайлам, несмотря на то, что есть вложенные запросы B. Второе Where предложение применяется ко всем Aвложенным Aзапросам.

Конструкторы

Имя Описание
DataLoadOptions()

Инициализирует новый экземпляр класса DataLoadOptions.

Методы

Имя Описание
AssociateWith(LambdaExpression)

Фильтрует объекты, полученные для определенной связи.

AssociateWith<T>(Expression<Func<T,Object>>)

Фильтрует объекты, полученные для определенной связи.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
LoadWith(LambdaExpression)

Извлекает указанные данные, связанные с основным целевым объектом, с помощью лямбда-выражения.

LoadWith<T>(Expression<Func<T,Object>>)

Указывает, какие вложенные объекты необходимо получить при отправке запроса для объекта типа T.

MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к