如何在EF4中调用存储过程

时间:2011-05-29 15:35:51

标签: c# stored-procedures entity-framework-4

我正在尝试在Entity Framework 4应用程序中调用存储过程,到目前为止得到了奇怪的结果。存储过程采用INOUT参数,并返回结果集。我映射了存储过程并创建了一个表示返回结果集中的行的复杂类型。我称之为

using (MyObjectContext ctx = new MyObjectContext())
{
     ObjectParameter out1 = new ObjectParameter("out1", typeof(String));
     ObjectParameter out2 = new ObjectParameter("out2", typeof(String));     
     var res = ctx.my_proc(1,2, out1,out2);
}

问题在于,除非我调用res.ToList()(或通过res枚举,或调用访问基础集合的任何方法),否则out1out2的值为{ {1}}。
我该如何解决? 感谢

2 个答案:

答案 0 :(得分:4)

你无法解决它。这是一个问题。在访问输出参数之前必须实现或丢弃结果集,因为这些输出参数在最后的结果集中传输,因此内部数据读取器必须首先读取包含主数据的返回结果集,然后访问下一个结果集以读取输出参数。顺便说一句。如果直接使用ADO.NET也是一样 - 这不是Entity框架本身的特性,而是SQL Server返回输出参数的方式以及DataReader按顺序使用结果集的方式。

答案 1 :(得分:1)

当你调用返回行表的过程或查询时 当用户调用ToList或枚举返回值

时,EF会执行实际操作