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让函数可用,唯一的问题仍然是返回数据读取器的这些神秘字段是什么?
Database.SqlQuery<T>()期望某种结果集(例如SELECT).在引擎盖下,它使用DbCommand.ExecuteReader(),当T它是标量时,它期望结果集只有一个字段 - 但如果结果集有多个字段,或者如果没有字段,则会抛出您遇到的异常.
可以通过传递DbParameterto Database.SqlQuery<T>()和设置来检索返回值,Direction = ParameterDirection.ReturnValue如下例所示:
仅供参考,如果你只是想返回值,但你不想要的结果集,使用ExecuteSqlCommand了DbParameter.
小智 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)
| 归档时间: |
|
| 查看次数: |
12900 次 |
| 最近记录: |