【问题标题】:Calling a stored procedure via EF6 where the Stored Procedure calls another procedure for the result通过 EF6 调用存储过程,其中存储过程为结果调用另一个过程
【发布时间】:2014-09-04 02:21:55
【问题描述】:

我正在尝试将 Entity Framework 6 引入完全依赖于存储过程的遗留系统。

我有一个存储过程,它构建一个查询,然后将它传递给处理所有分页要求的第二个查询。问题是,当我将存储过程添加到模型时,框架检测到返回类型为 2 列(varchar(4000)varchar(100)),而不是执行查询时返回的实际数据集。

当我尝试运行代码时,首先即时调试器崩溃并在 w3wp.exe 中出现一些未处理的 win32 异常。

然后当我取消调试时,我会看到错误消息

数据读取器与指定的“TFS_DevModel.spi_QualSearch_Result”不兼容。类型的成员“provider_code”在数据读取器中没有同名的对应列。

存储过程如下:

declare @SQL varchar(5000),  
@SearchCriteria varchar(1000)

-- build the sorting expression

-- various checks to append criteria based on input parameters

SELECT @SQL = 'select column1, column2, etc from tables ' + 
  @SearchCriteria

execute PagingProc @SQL, @sort_expression, [paging parameters]

我试图定义一个复杂类型来适应分页过程实际返回的数据,但我得到了同样的错误。

有谁知道我正在尝试做的事情是否可行?还是我应该考虑重构存储过程?

【问题讨论】:

    标签: sql-server c#-4.0 stored-procedures visual-studio-2013 entity-framework-6


    【解决方案1】:

    尝试将 w3wp.exe 附加到 IIS 进程(工具 > 附加到进程 > 向下滚动到 w3wp.exe,选择正确的 IIS 应用程序池并单击附加)。这似乎对我们有用。

    【讨论】:

    • 我不确定这是否会有所帮助,因为我在 w3wp 进程中遇到了异常。而且我看不出这将如何帮助生成实体模型,因为存储过程返回了第二个 SP 的结果。无论如何,我们已经走了另一条路,不过感谢您的回答。
    猜你喜欢
    • 2014-09-17
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多