我正在尝试在Entity Framework 4应用程序中调用存储过程,到目前为止得到了奇怪的结果。存储过程采用IN
和OUT
参数,并返回结果集。我映射了存储过程并创建了一个表示返回结果集中的行的复杂类型。我称之为
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
枚举,或调用访问基础集合的任何方法),否则out1
和out2
的值为{ {1}}。
我该如何解决?
感谢
答案 0 :(得分:4)
你无法解决它。这是一个问题。在访问输出参数之前必须实现或丢弃结果集,因为这些输出参数在最后的结果集中传输,因此内部数据读取器必须首先读取包含主数据的返回结果集,然后访问下一个结果集以读取输出参数。顺便说一句。如果直接使用ADO.NET也是一样 - 这不是Entity框架本身的特性,而是SQL Server返回输出参数的方式以及DataReader按顺序使用结果集的方式。
答案 1 :(得分:1)
当你调用返回行表的过程或查询时 当用户调用ToList或枚举返回值
时,EF会执行实际操作