执行 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
我有一个几年前编写的存储过程,它具有输出参数和 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