gpt4 book ai didi

entity-framework - 存储过程返回错误的标量值-1,而不是返回值

转载 作者:行者123 更新时间:2023-12-04 17:00:21 24 4
gpt4 key购买 nike

我试图从存储过程中返回标量值。我实际上想返回新创建的记录的ID,但是我已将问题简化为一个存储过程,该存储过程需要一个int并尝试返回该相同的int。它始终返回-1。非常感谢您的帮助。

Web API Controller 调用

var idtest = dbconn.my_return_int(123);

存储过程:
ALTER PROCEDURE [dbo].[my_return_int]  
@ID int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @return as int

SET @return = -999

RETURN @return
END
Context生成的存储过程调用
public virtual int my_return_int(Nullable<int> iD)  
{
var iDParameter = iD.HasValue ?
new ObjectParameter("ID", iD) :
new ObjectParameter("ID", typeof(int));

return (IObjectContextAdapter)this).ObjectContext.ExecuteFunction("my_return_int", iDParameter);
}

最佳答案

当执行ObjectContext.ExecuteFunction时,结果为:

from MSDN: discards any results returned from the function; and returns the number of rows affected by the execution



IE。它不返回输出参数,因为它不知道存在一个参数。此外,由于您在存储过程中调用了 SET NOCOUNT ON;,因此它甚至不返回受影响的行数,因此得到-1。

因此,您必须做两个更改:
  • 更改您的过程,以使其不返回值,而是选择它,即代替RETURN @return而是执行SELECT @return AS alias。注意,您需要“AS别名”部分。 alias可以是您想要的任何列名称。
  • 更改存储过程的映射,以便它需要int32值。如果您有疑问,请引用此Q&A

  • 这样,您将读取返回值作为结果集,而不是返回值。

    关于entity-framework - 存储过程返回错误的标量值-1,而不是返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253522/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com