如何使用实体框架检索从存储过程返回的值?

时间:2019-08-08 20:35:40

标签: c# .net sql-server entity-framework stored-procedures

我一直在寻找合适的方式来处理此问题。我有一个存储过程,该存储过程通过使用ID参数从表中查找记录,该参数仅输出一列。

在房子的C#端,我正在通过数据库上下文调用存储过程。

当前,收到的错误是:“空” 预期的结果是该行的内容。

https://banner2.kisspng.com/20180205/ecq/kisspng-video-camera-film-frame-video-camera-viewfinder-frame-for-digital-camera-5a7860497defb6.1781782515178384095158.jpg

CREATE PROCEDURE [dbo].[getLog]     
@logId INT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
SET NOCOUNT ON;
    SELECT [Logs] 
    FROM [dbo].[output]
    Where [ID]=@logId
END
GO

C#代码

OutputDTO<SearchInputDTO> output = new OutputDTO<SearchInputDTO>();
            try
            {
                var getID = srequest.ID;
                var retLog = _output.getLog(getID);
                return Ok(retLog);
            }
            catch (Exception e)
            {
                ErrorHandler.HandleError("Failed to retrieve rows: ", e);
                LogManager.Log("error", Level.ERROR, "Login: " + e);
                output.Success = false;
                output.ErrorMessage = "Failed to retrieve rows.";
                output.ErrorDetails = new Dictionary<string, string>
                    {
                        { "Error", output.ErrorMessage }
                    };

                var json = new JavaScriptSerializer().Serialize(output);
                return Ok(json);
            }

1 个答案:

答案 0 :(得分:1)

如问题中所述:您正在使用实体框架。为什么必须为此调用存储过程?

您可以通过linq完成

dbContext.Output.Where(x=>x.Id == logId).FirstOrDefault()

这将返回输出表的第一个返回对象。

希望这会有所帮助。