[英]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.