Как работают вызовы хранимых процедур LINQ TO SQL?

У меня есть контекст LINQ TO SQL, который я создал, который вызывает хранимую процедуру. Когда я просматриваю ISingleResult, он создает объекты на лету, пока базовый DataReader считывает результаты, или он заранее помещает все в Entities до возврата вызова функции.

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

DatabaseDataContext context = new DatabaseDataContext();
var resultSet = context.MyStoredProc();

foreach (var result in resultSet)
{
    // some code here
}

Будет ли это загружать каждую вещь в память сразу или она будет загружаться по одной, пока я ее просматриваю??


person Superdumbell    schedule 03.03.2010    source источник


Ответы (1)


Хранимая процедура будет вызываться при перечислении результата, поэтому выполнение откладывается. Тем не менее, он не лениво загружается. Это означает, что как только вы перечислите результат своей хранимой процедуры, вы фактически будете выполнять хранимую процедуру полностью, и все результаты будут возвращены.

Если вы привязываете результаты своей хранимой процедуры к классу модели данных, который поддерживает ленивую загрузку своих дочерних элементов, вы получаете ленивую загрузку свойств этого класса.

person Joseph    schedule 03.03.2010