C# EF5从返回列表或不返回任何内容的存储过程中收集数据
我有一个如下所示的存储过程:C# EF5从返回列表或不返回任何内容的存储过程中收集数据,c#,entity-framework,tsql,C#,Entity Framework,Tsql,我有一个如下所示的存储过程: 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 Fie
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
创建过程[dbo].[Foo]
(
@ID INT,
@PARAM1 NVARCHAR(10),
@错误输入输出
)
作为
开始
如果(@ID<0)
开始
设置@Error=1
返回
结束
如果(@ID>100)
开始
设置@Error=2
返回
结束
从Param=@PARAM1的表中选择Field1、Field2、Field3
结束
在EF5中,我这样称呼它
ObjectParameter error = new ObjectParameter("Error", typeof(global::System.Int32));
List<MyFoo> list = db.Foo(id, param1, error).ToList();
ObjectParameter error=newobjectparameter(“error”,typeof(global::System.Int32));
List=db.Foo(id,param1,error).ToList();
代码没有编译,因为并非所有路径都返回一个值,这是有意义的,因为我在存储过程中有几个“RETURN”
调用
问题:从EF5调用此存储过程的正确方法是什么(无法更改存储过程)
提前感谢从SP中删除
错误
参数并返回
s,并用于发出错误信号。确保严重性大于10,这样它将抛出SqlException,但小于17,这样它就不会是系统问题,并报告给DB管理员:
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
创建过程[dbo].[Foo]
(
@ID INT,
@PARAM1 NVARCHAR(10)
)
作为
开始
如果(@ID<0)
开始
RAISERROR('ID小于0',16,0);
结束
如果(@ID>100)
开始
RAISERROR('ID大于100',16,0);
结束
从Param=@PARAM1的表中选择Field1、Field2、Field3
结束
由于存储过程在中间有返回状态,所以它是MOR ILKE动态SQL。我非常怀疑EF与DB上下文将一起工作。我认为最好使用常规的ExeCudieDADER方法。如果正常执行,这个链接会有助于存储的Pro实际工作吗?我猜你可能需要一个SET@Error=0
newlineRETURN
,在该过程结束时,它才能与EF一起工作……但我没有太多处理它们,所以我可能是错的。@FizzBuzz存储过程就是这样工作的是的…@Krishnannijeevan博客作者似乎有一个输出参数未填充的问题,我的问题是,正如您所说,存储过程并不总是返回列表。可能有一个解决方案是用SELECT“as field1”、“as field2…”替换返回另一个选择是在EF中完成所有操作。除非您只提供实际存储过程的一个片段,否则根本没有理由拥有它。该方法不处理查询,只检查参数并返回查询结果。编写一个接受2个参数并返回完整或空列表的方法要简单得多。