Выходной параметр в хранимой процедуре в EF - PullRequest
13 голосов
/ 01 июня 2011

У меня есть существующая база данных с множеством сложных хранимых процедур, и я хочу использовать эту процедуру через EF 4. Я сделал следующее:

  1. Создан объект данных EF, Customer.
  2. Добавлена ​​хранимая процедура в EF
  3. Щелкните правой кнопкой мыши конструктор EF и добавьте функцию импорта.
  4. Имя импорта функции - MyFunction, сложный тип.

Результирующий код:

CustomerEntities entity = new CustomerEntities();
var result = entity.MyFunction("XYZ", ref o_MyString);

Теперь моя хранимая процедура имеет выходной параметр, который я использовал для вызова по ссылке (в WebForm).Но я получаю следующую ошибку:

не может преобразовать 'ref string' в 'System.Data.Objects.ObjectParameter'

Пожалуйста, помогите

Редактировать

Когда я пытаюсь сохранить, я получаю следующее сообщение об ошибке

Привязка функции отображения определяет функцию Model.Store.P_GetCustomer с неподдерживаемымпараметр: o_MyString.Выходные параметры могут быть отображены только через свойство RowsActedParameter.Используйте привязки результатов для возврата значений из вызова функции.

Ответы [ 2 ]

36 голосов
/ 01 июня 2011

Выходные параметры возвращаются в ObjectParameter экземпляре.Поэтому вы должны использовать код, подобный следующему:

var oMyString = new ObjectParameter("o_MyString", typeof(string));
var result = ctx.MyFunction("XYZ", oMyString).ToList();
var data = oMyString.Value.ToString();

Причина в том, что функция импорта не может использовать параметр ref, поскольку выходной параметр не заполняется, пока вы не обработаете набор результатов из базы данных = если вы не вызовете ToListили итерируйте результат хранимой процедуры, выходной параметр равен нулю.

2 голосов
/ 09 сентября 2014

msdn предлагает следующее:

CREATE PROCEDURE dbo.GetDepartmentName
     @ID INT ,
     @Name NVARCHAR(50) OUTPUT
AS
     SELECT   @Name = Name
     FROM     Department
     WHERE    DepartmentID = @ID

Решение

using (SchoolEntities context = new SchoolEntities())
{
   // name is an output parameter.

   ObjectParameter name = new ObjectParameter("Name", typeof(String));
   context.GetDepartmentName(1, name);
   Console.WriteLine(name.Value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...