Сначала позвольте мне начать с объяснения моего варианта использования:
Скажем, есть база данных "Автомобили". В этой базе данных каждая строка может иметь «Марка», «Модель», «Тип двигателя» и т. Д. У меня есть страница, которая по сути является представлением одной записи «Автомобиль», отображающей ее различные характеристики. На этой странице у меня есть пользовательский элемент управления, который вычисляет и отображает различные статистические данные MPG на основе записи «Автомобиль». Пользовательский элемент управления передает запись «Car» через свойство, а затем использует ее для своих расчетов.
Внутри этого пользовательского элемента управления происходит нечто подобное:
private void DataBindGrid()
{
gridView.DataSource = this.CarRecord.GetMPGStats();
}
Внутренний для "CarRecord" - это запрос LINQ-to-SQL, использующий контекст данных CarRecord. Для целей этого расчета было бы более эффективно сделать это:
private void DataBindGrid()
{
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Car>(c => c.Engine);
this.CarRecord.DataContext.LoadOptions = dlo;
gridView.DataSource = this.CarRecord.GetMPGStats();
}
Для целей этого примера, игнорируйте, может ли это быть плохим дизайном для пользовательского элемента управления, передающего запись & текстовый текст.
Вот проблемы, которые я вижу:
- Возможно, страница установила собственные параметры загрузки перед передачей записи в пользовательский элемент управления, что привело к неэффективному запросу.
- На странице могут отсутствовать новые настройки, заданные пользовательским элементом управления, когда она продолжает использовать саму запись автомобиля.
Итак, у меня два вопроса:
- Каков наилучший способ «очистить» LoadOptions? Просто установите
DataContext.LoadOptions = new DataLoadOptions();
или = null;
?
- Есть ли способ установить временные LoadOptions, которые влияют только на определенную операцию, прежде чем вернуться к тому, что было раньше?
Заранее спасибо.