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запросам.
- В примере 4
Конструкторы
| Имя | Описание |
|---|---|
| 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) |