【发布时间】:2013-05-30 09:32:50
【问题描述】:
在我的项目中,EF 调用了一个如下所示的存储过程。它返回 1 或范围标识。
在 EF 函数导入时,存储过程以十进制返回类型列出。
当存储过程返回作用域标识时,一切正常。
但是当sp的条件满足时,ef抛出错误为
存储数据提供程序返回的数据读取器没有足够的列用于请求的查询。
请帮忙..
这是我的存储过程:
@VendorId int,
@ueeareaCode varchar(3),
@TuPrfxNo varchar(3),
@jeeSfxNo varchar(4),
@Tjode varchar(3),
@uxNo varchar(3),
@TyufxNo varchar(4),
@Iyuy bit
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
SET NOCOUNT ON;
IF EXISTS (Select dfen_id
from dbo.efe_phfedwn_eflwn
where
[yu] = @Tyuode and
[uy] = @TuyxNo and
[yuno] = @Tuo)
return 1
ELSE
Begin
INSERT INTO dbo.yu
....................
Select Scope_Identity()
End
END
【问题讨论】:
-
我对 EF 不是很有经验,但是否有可能因为您返回 1 或选择
Scope_Identity()它有困难?您可以尝试将Select Scope_Identity()更改为RETURN Scope_Identity()看看是否会有所不同? -
如果这不能解决它(我没有寄予厚望),它会有助于其他人看到 EF 用于获取此 SP 的结果的代码,模型代码或任何东西
-
不,我已经使用 return 进行了测试。但现在它在两种情况下都显示相同的错误。后来,它只有在条件满足时才会显示。
-
好吧,也许解决方案实际上是相反的,您只需使用
SELECT 1和SELECT Scope_Identity()? -
使用 select 时,else 条件可以,但在 if 条件下,它不能将 int32 转换为 decimal 。请帮助。我的 Ef 输出为十进制。
标签: asp.net entity-framework c#-4.0 stored-procedures