问题描述
|
我正在尝试在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会真正执行