执行 returns 个结果集并具有 Entity Framework 输出参数的存储过程

Executing a stored procedure that returns a result set and has output parameters with Entity Framework

我有一个几年前编写的存储过程,它具有输出参数和 return 一个结果集。我正在尝试在 EntityFramework 中使用它。最初,当我导入它时,生成的代码使用 ExecuteFunction() 来执行该过程。使用此方法,ObjectParameter 对象具有输出参数值。然后,我更改了模型中导入过程的定义,以输出我在模型中定义的与存储过程 returns 结果集相匹配的复杂类型。生成的代码已更改为使用 ExecuteFunction<MyComplexType>() 执行过程,并且过程 return 的结果集现在位于 IEnumerable<MyComplexType> 中。但是我的 ObjectParameter 对象具有我在创建它们时设置的默认值,而不是过程的输出。

我在我的模型中创建了第二个函数映射,但未设置为 return 复杂类型。我目前正在通过这两个函数两次执行存储过程。第一次执行不是 return 复杂类型。它设置 ObjectParameter 值。然后我将这些相同的 ObjectParameters 传递给第二个函数,在这两次执行结束时,我得到了结果数据和存储过程的输出。

我是不是做错了什么?或者这是 Entity Framework 6 的一些限制?

抱歉,我对你的问题有点困惑。

假设您在执行存储过程之前执行此操作。

   SqlCommandBuilder.DeriveParameters(_sqlCommand);

这会将所有参数放入您的 sql 命令对象中。执行后,

   _sqlCommand.ExecuteNonQuery();

存储过程中任何具有 OUTPUT 子句的参数都将在其中具有值,前提是它们在存储过程中获得值。所以你可以通过它们来枚举。如果我遗漏了什么,我深表歉意。

事实证明,在读取所有结果之前,输出参数不可用。我通过将 .ToList() 附加到 ExecuteFunction() 调用的结尾来解决我的问题。我通过浏览 Visual Studio 中的元数据弄明白了。您可以在此处查看相关文档:

我在 msdn 上的实际文档中没有看到这一点,我不确定为什么。

https://msdn.microsoft.com/en-us/library/bb739018(v=vs.110).aspx