如何在SP中使用带有EF 4.0的OutPut参数

时间:2010-06-04 17:52:35

标签: entity-framework-4

我使用我的存储过程更新了我的模型,在模型浏览器中我可以看到它也有一个函数导入 如果不存在,我的SP会插入一条记录,并返回1,否则返回0,我认为非常简单。

SP

CREATE PROCEDURE [dbo].[User_UpdateMessage]
(
@UserId int = 0, 
@UserId2 int = 0,
@Success bit = 0 OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;

IF NOT EXISTS ( SELECT [UserIdFrom] FROM  [dbo].[MessageUpdate] WHERE [UserIdFrom] = @UserId AND [UserIdTo] = @UserId2 )
BEGIN
    INSERT INTO [dbo].[MessageUpdate] ([UserIdFrom], [UserIdTo])
    VALUES (@UserId, @UserId2)
    SELECT @Success = 1;
END
ELSE
    SELECT @Success = 0;
END

在我的代码中,我打电话给SP:

// Output Parameter
System.Data.Objects.ObjectParameter paramSuccess1 = 
new System.Data.Objects.ObjectParameter("Success", typeof(byte));
_Entity.User_UpdateMessage(id, userId, paramSuccess1);

执行SP时失败,出现以下错误:

  

商店退回的数据阅读器   数据提供者没有足够的   请求的查询列

[UPDATE]
在我写这篇文章时,我解决了这个问题。在模型设计器中,返回类型应该是none,我让它返回Byte。

这个问题的答案可能是进一步的改进或变化。

3 个答案:

答案 0 :(得分:14)

我也有同样的问题,将返回类型更改为NONE而不是int32。谢谢节省了我几个小时的调试

答案 1 :(得分:1)

答案 2 :(得分:0)

尝试使用以下内容..

// Output Parameter
System.Data.Objects.ObjectParameter paramSuccess1 = 
  new System.Data.Objects.ObjectParameter("Success", typeof(bool));
_Entity.User_UpdateMessage(id, userId, paramSuccess1);