Я считаю, что это простая опечатка: вы называете свой массив OBJ
, но вы ссылаетесь на него как OBJS
.
Это не так ошибка, как это - отсутствие функции. Платформа Объекта просто не поддерживает хранимые процедуры, возвращающие скалярные значения прямо сейчас. Я полагаю, что это, как предполагается, изменяется в.NET 4.0. Тем временем можно выполнить такую хранимую процедуру при помощи соединения хранилища, доступного через CreateDbCommand.
Поскольку единственное, что работает сейчас, - это сопоставление возвращаемого типа с сущностью, один Обходной путь - создать представление, соответствующее возвращаемым данным, и создать объект для представления. Это будет работать только в том случае, если SP выполняет SELECT для возврата набора результатов, а не возвращаемого значения. Я получил это для работы с примером приложения, например, так: SP:
ALTER PROCEDURE [dbo].[DoSomething]
@param1 varchar(50),
@param2 varchar(50)
AS
BEGIN
DECLARE @ID INT
SET NOCOUNT ON;
INSERT tmp_header (fname, lname) VALUES (@param1, @param2)
SET @ID = SCOPE_IDENTITY()
SELECT @ID AS 'id'
END
VIEW:
CREATE VIEW [dbo].[View_1]
AS
SELECT 0 as id
Создайте функцию импорта, установив тип возвращаемого значения равным View_1, и постройте модель.
в коде:
class Program
{
static void Main(string[] args)
{
using (PS_RADSTESTEntities ctx = new PS_RADSTESTEntities())
{
EntityConnection ec = ctx.Connection as EntityConnection;
ec.Open();
DbTransaction txn = ec.BeginTransaction();
ObjectResult<View_1> result = ctx.DoSomething("Toby", "Kraft");
View_1 row = result.Single();
int id = row.id;
// do some other interesting things ...
ctx.SaveChanges();
txn.Commit();
}
}
}
Убедитесь, что имена столбцов точно совпадают для вида и SP. Toby
У меня была похожая проблема и я решил ее с помощью этой статьи: