【问题标题】:Calling multiple stored procedure from a main stored procedure in MVC从 MVC 中的主存储过程调用多个存储过程
【发布时间】:2019-08-01 12:26:02
【问题描述】:

我有一个 Main 存储过程,它在其中调用 4 个其他存储过程。

Alter PROCEDURE [dbo].COMBINED
    @Status varchar(50) 

AS
BEGIN


EXEC StatusMyFamilyProtectionPremier @Status = @status
EXEC StatusMyFamilyProtectionBasic @Status = @Status
EXEC StatusChildeducationSavings @Status = @status
exec StatusChildeducationTerm @Status = @status


END

当我在 SQL 中执行它时,它运行良好,并为我提供了所有 4 个内部存储过程的结果集..

但是当我从 MVC 应用程序调用 Main 存储过程时,我只能得到第一个内部存储过程的结果。

我不知道为什么它不返回其他 3 个内部存储过程的结果。

我是这样从我的应用程序中调用它的

 var life = dc.COMBINED(status);

我直接从数据库将存储过程添加到我的模型中。

我不确定我到底做错了什么。

【问题讨论】:

  • “我将存储过程直接从数据库添加到我的模型中”使用实体框架,或者...?无论如何,这个“问题”的原因是无论您使用什么都期望 sprocs 返回一个结果集,以便创建一个实体来将该结果集放入其中。您的 sproc 正在返回多个结果集/实体,因此您可能必须手动映射它们......或者只是单独调用单独的 sprocs。
  • @IanKemp 是的,我正在使用实体框架。我之前是单独打电话给他们的,但我决定想办法一次给他们打电话。如何手动映射它们?
  • 你可以直接从实体框架中获取多重结果

标签: sql sql-server asp.net-mvc stored-procedures


【解决方案1】:

我在这里找到了问题的答案

https://www.khalidabuhakmeh.com/entity-framework-6-multiple-result-sets-with-stored-procedures

Entity Framework 默认只返回存储过程的第一个结果集,此代码允许您从 MVC 中的存储过程返回多个结果集。

如果您的存储过程有参数,请尝试此链接中的代码。

https://gist.github.com/khalidabuhakmeh/7310ab2340a7bef43c7307598c8fe101

代码已修改为返回多个结果集

【讨论】:

  • 请不要留下答案的链接,而不是代码。为了方便以后的用户使用,请在您的回答中留下问题的解决方案。
  • @WynDiesel 但是代码不属于我,我写在这里不会错吗?代码链接包含答案。
  • 阅读stackoverflow.com/help/how-to-answer。链接很好,但它应该包含一些上下文。
  • @WynDiesel 哦,好吧,我明白你的意思。谢谢
【解决方案2】:

我认为您的前三个表结构与上图相同。因此,您将使用“union”关键字并将结果合并到一个表中,并且只调用一个过程。

【讨论】:

    【解决方案3】:

    Entity Framework 始终从存储过程返回第一个结果集,并且不支持来自存储过程的多个结果集。

    我使用DapperMicro ORM 从存储过程中获取多个结果集。

    【讨论】:

    • 当我点击 Dapper 时我得到了。 “/”应用程序中的服务器错误。你调用的对象是空的。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。
    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多