Как вызвать хранимую процедуру в EF4 - PullRequest
3 голосов
/ 29 мая 2011

Я пытаюсь вызвать хранимую процедуру в приложении Entity Framework 4 и пока получаю странные результаты. Хранимая процедура принимает параметры IN и OUT и возвращает набор результатов. Я отобразил хранимую процедуру и создал сложный тип, который представляет строку в возвращенном наборе результатов. Я называю это

using (MyObjectContext ctx = new MyObjectContext())
{
     ObjectParameter out1 = new ObjectParameter("out1", typeof(String));
     ObjectParameter out2 = new ObjectParameter("out2", typeof(String));     
     var res = ctx.my_proc(1,2, out1,out2);
}

Проблема в том, что если я не вызову res.ToList() (или не перечислю через res, или не вызову какие-либо методы, которые обращаются к основной коллекции), значения out1 и out2 равны null.
Как мне это исправить?
Спасибо

Ответы [ 2 ]

4 голосов
/ 29 мая 2011

Вы не можете это исправить. Это гоча. Набор результатов должен быть материализован или отброшен до того, как выходные параметры станут доступны, поскольку эти выходные параметры передаются в последнем наборе результатов, поэтому внутреннее устройство чтения данных должно сначала прочитать возвращаемый набор результатов с основными данными, а затем обратиться к следующему набору результатов, чтобы прочитать выходные параметры. Btw. То же самое, если вы используете ADO.NET напрямую - это не особенность самой среды Entity, а способ, которым SQL-сервер возвращает выходные параметры, и способ, которым DataReader использует результирующие наборы в последовательном порядке.

1 голос
/ 29 мая 2011

когда вы вызываете процедуру или запрос, который возвращает таблицу строк, EF выполняет реальное выполнение, когда пользователь вызывает ToList или перечисляет возвращаемое значение

...