0
我已经编写了一个存储过程,如果找到,将返回一行的ID,如果未找到,将创建一行并返回新创建行的ID。我在C#函数中检索返回值时遇到问题。无法读取使用实体框架从存储过程返回的值
存储过程:
PROCEDURE [TagDatabase].[GetTagID]
-- Add the parameters for the stored procedure here
@TagName as varchar(200),
@UserID int = 0,
@TagID int = 0 OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
select @TagID=ID from Tag where Name = @TagName and [email protected];
IF NULLIF(@TagID, '') IS NULL
BEGIN
DECLARE @OutputTbl TABLE (ID INT)
INSERT INTO Tag(Name, ParentID, UserID)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES (@TagName, 0, @UserID);
select @TagID=ID from @OutputTbl
END
select @TagID
END
我的函数来获取这个返回的值:
ObjectParameter objParam = new ObjectParameter("TagID", typeof(long));
context.GetTagID("newTag", 10, objParam);
context.SaveChanges();
long id = Convert.ToInt64(Convert.ToInt64(id)));
您建议的表达式总是返回0.而如果我在SQL服务器管理工作室上运行相同的过程,则它工作得很好。事实上,objParam.Value总是被接收为null。 – labyrinth
我不知道为什么这不起作用,您是否在代码中保留最终选择的@TagID?这将返回一个结果集,但您仍应该能够获取输出参数。我唯一能想到的其他事情是将typeof(long)更改为typeof(int)以匹配存储的proc参数。 – Mike
类似的线程http://stackoverflow.com/questions/10339750/entity-framework-stored-procedure-return-value?rq=1 – Mike