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

时间:2015-03-02 20:20:03

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

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

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

我做错了吗?或者这是实体框架6的一些限制吗?

2 个答案:

答案 0 :(得分:1)

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

enter image description here

我在msdn的实际文档中没有看到这一点,我不确定原因。

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

答案 1 :(得分:0)

我道歉,因为我对你的问题有点困惑。

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

   SqlCommandBuilder.DeriveParameters(_sqlCommand);

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

   _sqlCommand.ExecuteNonQuery();

存储过程中具有OUTPUT子句的任何参数都将包含值,前提是它们在存储过程中获取值。所以你可以通过它们进行枚举。抱歉,如果我遗漏了某些东西,我想我就是这样。