Как узнать, возвращал ли LinqToSql DataContext результаты ранее? - PullRequest
1 голос
/ 14 марта 2011

При установке свойства LoadOptions для LinqToSql DataContext, если контекст уже возвратил результаты из другого запроса, возникает исключение «Настройка параметров загрузки после получения результатов из запроса».

Я хочу знать, есть ли способ проверить объект DataContext, чтобы убедиться, что он уже вернул результаты предыдущего запроса?

Ответы [ 3 ]

1 голос
/ 14 марта 2011

Ну, это не DataContext, который возвращает результаты как таковые, а запрос. Запросы загружаются лениво, что означает, что они не попадают в базу данных, пока их результаты не потребуются. Например, вызов .ToList () или циклический просмотр результата.

По-прежнему не совсем отвечаю на ваш вопрос, но я рекомендую установить LoadOptions в конструкторе DataContext - или сразу после его создания. Это должно удалить тайну.

0 голосов
/ 14 марта 2011

У меня была та же проблема .... единственный способ избежать исключения (потому что вы даже не можете сбросить конфигурацию) - это проверить, имеет ли LoadOptions значение null или нет.Если он нулевой, я устанавливаю новую опцию, если нет, я создаю новый экземпляр DataContext.

0 голосов
/ 14 марта 2011

Как правило, вы не будете хранить 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();
}   

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

...