【发布时间】:2016-02-12 00:15:25
【问题描述】:
我正在尝试通过 EF 调用存储过程并从存储过程中检索返回值。我使用this 回答作为指导。这是我的存储过程:
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;
if (!wasSuccessful)
{
//DO STUFF
}
我收到此错误消息:
数据读取器有多个字段。多个字段对 EDM 基元或枚举类型无效
我做错了什么?
【问题讨论】:
-
您是否在存储过程中执行了 SELECT 操作?如果是这样,这是您的返回类型。作为提示 - 您必须先使用结果集,然后才能获取输出参数的值。
-
@Pawel:整个存储过程都存在问题。我也试过
SET @result = 0。 -
好的。
--DO STUFF表示您正在正文中执行某些操作,并且您没有设置输出参数的值,这就是为什么我不知道这是否是一个完整的过程... -
@Pawel:很抱歉造成混乱。我现在在做什么(更新)你如何在 SP 中设置输出参数?
-
我现在不记得了,但它可能是 EF 总是期望一个结果集。你能在你的存储过程中添加一个虚拟的
SELECT 0看看它是否有效吗?
标签: c# sql sql-server entity-framework