Как узнать, возвращал ли LinqToSql DataContext результаты ранее?
При настройке LoadOptions
недвижимость на LinqToSql DataContext
если контекст уже возвратил результаты из другого запроса, генерируется исключение "Настройка параметров загрузки после получения результатов из запроса".
То, что я хочу знать, есть ли способ проверить объект DataContext, чтобы увидеть, если он уже вернул результаты предыдущего запроса?
3 ответа
Ну, это не DataContext, который возвращает результаты как таковые, а запрос. Запросы загружаются лениво, что означает, что они не попадают в базу данных, пока их результаты не потребуются. Например, вызов.ToList() или циклический просмотр результата.
Все еще не совсем отвечаю на ваш вопрос, но я рекомендую установить LoadOptions в конструкторе DataContext - или сразу после его создания. Это должно удалить тайну.
Обычно вы не будете хранить DataContext достаточно долго, чтобы столкнуться с этой проблемой. Этот класс спроектирован так, чтобы быть дешевым в отношении создания и уничтожения, поэтому вы обычно создаете новый объект DataContext для отдельной единицы работы, а затем избавляетесь от него. Что-то вроде:
using( var db = new TestDataContext() )
{
db.LoadOptions = CreateLoadOptions();
var p = (from person in db.Persons
where <someCondition>
select p)
.First();
p.SomeProperty = someValue;
db.SubmitChanges();
}
Я понимаю, что технически это не отвечает на ваш вопрос, но я не знаю, как проверить, был ли выполнен запрос на контроллере домена, если не установлен флаг в вашем собственном коде.
У меня была та же проблема.... единственный способ избежать исключения (потому что вы даже не можете сбросить конфигурацию) - это проверить, имеет ли LoadOptions значение null или нет. Если он нулевой, я устанавливаю новую опцию, если нет, я создаю новый экземпляр DataContext.