繁体   English   中英

在实体框架中调用存储过程

[英]Calling Stored Procedure In Entity Framework

我在SQL Server存储过程的末尾有以下部分:

if(@someValue < 0)
  begin
    SELECT @resultIsSuccess = 0
    Return @resultIsSuccess
  end
else
  begin
    SELECT @resultIsSuccess = 1
    Return @resultIsSuccess
  end

其中@resultIsSuccess的类型为bit

因此,基本上,我将返回布尔值以表明该过程是否产生了预期的结果。

在EF端,我将功能导入的返回类型配置为boolean。

当我打电话时:

bool isSuccess = context.MyFunctionImport(arg1, arg2).FirstOrDefault().Value;

我得到以下异常:

商店数据提供者返回的数据读取器没有足够的列用于请求的查询。

这里有什么问题?

如果要返回值,则需要一个返回参数。 因此,您不是在使用数据datareader来获取价值。 您没有select任何内容,因此您将需要访问该返回参数。

而是select您的值来填充数据datareader因为当您尝试通过EF从非datareader读取器读取值时,您可能会遇到错误。

if(@someValue < 0)
    SELECT 0
else
    SELECT 1

我不确定返回值是否受支持, 引用 ,所以您可能正在尝试做不可能的事情,除非在较新的版本中进行了修复。

您必须记住,您不会从过程中返回位数据类型。 存储过程的返回数据类型为int。

您可以将代码简化为单行return语句。

return case when @someValue < 0 then 0 else 1 end

然后在代码中,您需要将0或1解析为布尔值。

-编辑-由于您正在寻找第一个值,因此您将需要在过程中使用select语句。 这样的事情。

Select isSuccess  = case when @someValue < 0 then 0 else 1 end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM