如何在EF4中调用存储过程

问题描述

| 我正在尝试在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
的值为
null
。 我如何解决它? 谢谢     

解决方法

        您无法修复它。这是一个陷阱。在访问输出参数之前,必须实现或丢弃结果集,因为这些输出参数是在最后一个结果集中传输的,因此内部数据读取器必须首先读取包含主数据的返回结果集,然后访问下一个结果集以读取输出参数。顺便说一句。如果直接使用ADO.NET,这是相同的-这不是Entity Framework本身的功能,而是SQL Server返回输出参数的方式以及DataReader按顺序使用结果集的方式。     ,        当您调用返回行表的过程或查询时 当用户调用ToList或枚举返回值时,EF会真正执行