EF5 从返回列表或不返回任何内容的存储过程中收集数据

本文关键字:返回 存储过程 存储 过程中 数据 列表 任何内 EF5 | 更新日期: 2023-09-27 18:36:25

我有一个如下所示的存储过程:

CREATE PROCEDURE [dbo].[Foo]
(
  @ID INT,
  @PARAM1 NVARCHAR(10),
  @Error INT OUT
)
AS 
BEGIN
  IF (@ID < 0)
  BEGIN
    SET @Error = 1
    RETURN
  END
  IF (@ID > 100)
  BEGIN
    SET @Error = 2
    RETURN
  END
  SELECT Field1, Field2, Field3 FROM TABLE WHERE Param = @PARAM1
END

在 EF5 中,我是这样称呼它的

ObjectParameter error = new ObjectParameter("Error", typeof(global::System.Int32));
List<MyFoo> list = db.Foo(id, param1, error).ToList();

代码无法编译,因为"NOT ALL PATH RETURNS A VALUE"这是有意义的,因为我在存储过程中有几个"RETURN"调用。

问题:
从 EF5 调用此存储过程的正确方法是什么(无法更改存储过程)?

提前致谢

EF5 从返回列表或不返回任何内容的存储过程中收集数据

从 SP 中删除 Error 参数和 RETURN s,并使用 RAISERROR 发出错误信号。确保严重性大于 10,以便抛出 SqlException,但小于 17,因此这不是报告给数据库管理员的系统问题:

CREATE PROCEDURE [dbo].[Foo]
(
  @ID INT,
  @PARAM1 NVARCHAR(10)
)
AS 
BEGIN
  IF (@ID < 0)
  BEGIN
    RAISERROR('ID is less than 0', 16, 0); 
  END
  IF (@ID > 100)
  BEGIN
    RAISERROR('ID is greater than 100', 16, 0); 
  END
  SELECT Field1, Field2, Field3 FROM TABLE WHERE Param = @PARAM1
END