如何将值从存储过程返回到EF [英] How to return a value from a stored procedure to EF

查看:111
本文介绍了如何将值从存储过程返回到EF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图通过EF调用一个存储过程,并从存储过程中检索一个返回值。我已经使用答案作为指导。这是我的存储过程:

  CREATE PROCEDURE [dbo]。[usp_test] 

@result int OUT

AS
BEGIN

- DO STUFF

SET @result = 0
END

这是我如何从EF呼叫:

  var status = new SqlParameter 
{
ParameterName =result,
DbType = DbType.Int32,
Direction = ParameterDirection.Output
};
var result = context.Database.SqlQuery< int>(EXEC usp_test @result,status);
var wasSuccessful = result.First()== 1;
如果(!wasSuccessful)
{
// DO STUFF
}

我收到此错误消息:


数据读取器有多个字段。多个字段对EDM原语或枚举类型无效


我做错了什么?

解决方案

在程序结束前尝试选择@result

  CREATE PROCEDURE [dbo]。[usp_test] 

@result int OUT

AS
BEGIN

- DO STUFF

SET @result = 0
选择@result
END

希望它有效。


I'm attempting to call a stored proc through EF and retrieve a return value from the stored proc. I've used this answer as a guide. Here is my stored proc:

CREATE PROCEDURE [dbo].[usp_test]
(
    @result int OUT
)
AS
BEGIN

--DO STUFF

SET @result = 0
END

Here is how I'm calling it from EF:

var status = new SqlParameter
{
    ParameterName = "result",
    DbType = DbType.Int32,
    Direction = ParameterDirection.Output 
};
var result = context.Database.SqlQuery<int>("EXEC usp_test @result", status);
var wasSuccessful = result.First() == 1;
if (!wasSuccessful)
{
    //DO STUFF
}

I'm getting this error message:

The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types

What am I doing wrong?

解决方案

Try select @result before end of procedure.

CREATE PROCEDURE [dbo].[usp_test]
(
    @result int OUT
)
AS
BEGIN

--DO STUFF

SET @result = 0
Select @result
END

Hope it works.

这篇关于如何将值从存储过程返回到EF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆