C# 无法读取使用实体框架从存储过程返回的值

C# 无法读取使用实体框架从存储过程返回的值,c#,sql-server,stored-procedures,entity-framework-6,C#,Sql Server,Stored Procedures,Entity Framework 6,我已经编写了一个存储过程,如果找到,它将返回一行的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

我已经编写了一个存储过程,如果找到,它将返回一行的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 UserID=@UserID;
    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)));
改变

long id=Convert.ToInt64(Convert.ToInt64(id))

long id=Convert.ToInt64(objParam.Value)


您建议的表达式始终返回0。然而,如果我在SQLServerManagementStudio上运行相同的过程,它将非常好地工作。事实上,objParam.Value总是作为null接收。我不知道为什么这不起作用,您是否在代码中保留最后的select@TagID?这将返回一个resultset,但您应该仍然能够获取输出参数。我唯一能想到的另一件事是将typeof(long)更改为typeof(int),以匹配存储的proc参数