调用返回整数的过程时,数据读取器有多个字段错误

Jyr*_*kka 9 .net c# sql-server entity-framework

遇到此错误时,我试图获取存储过程执行的状态代码:

EntityFramework.SqlServer.dll中出现"System.Data.Entity.Core.EntityCommandExecutionException"类型的异常,但未在用户代码中处理

附加信息:数据读取器具有多个字段.多个字段对EDM原语或枚举类型无效.

我已经重写了程序,除了返回一个整数值之外什么都不做,这就是它现在的样子:

ALTER Procedure [dbo].[test]
(
    @i int,
    @a nvarchar(max),
    @b nvarchar(max),
    @c nvarchar(max),
    @d nvarchar(max)
)
As
Begin
    SET NOCOUNT ON

    return 1
End
Run Code Online (Sandbox Code Playgroud)

但是在到达行的过程调用时,我仍然在运行时得到相同的错误:

this.Database.SqlQuery<int>("test @i, @a, @b, @c, @d", p_i, p_a, p_b, p_c, p_d).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

反正有没有弄清楚这些领域是什么,它们来自哪里?我该如何获得返回值?

我试图指定一个两个字符串的元组作为T调查这些值,但没有成功......

更新:
Select 1不是return 1让函数可用,唯一的问题仍然是返回数据读取器的这些神秘字段是什么?

jjj*_*jjj 7

Database.SqlQuery<T>()期望某种结果集(例如SELECT).在引擎盖下,它使用DbCommand.ExecuteReader(),当T它是标量时,它期望结果集只有一个字段 - 但如果结果集有多个字段,或者如果没有字段,则会抛出您遇到的异常.

可以通过传递DbParameterto Database.SqlQuery<T>()和设置来检索返回值,Direction = ParameterDirection.ReturnValue如下例所示:


仅供参考,如果你只是想返回值,但你不想要的结果集,使用ExecuteSqlCommandDbParameter.


小智 0

尝试这个

var result = this.Database.SqlQuery<int>("exec test {0}, {1}, {2}, {3}, {4}", p_i, p_a, p_b, p_c, p_d).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)