【问题标题】:How to return list of Stored Procedure in SQL Server and WebAPI2如何在 SQL Server 和 WebAPI2 中返回存储过程列表
【发布时间】:2015-07-11 03:09:10
【问题描述】:

以下代码包含创建的过程。

USE [SAMPLE_DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetAllGroups] 
AS
BEGIN
    SELECT [dbo].[QR_Groups].[Id], [dbo].[QR_Groups].[name], [dbo].[QR_Groups].[code]
    FROM [dbo].[QR_Groups]
END

我无法使用存储过程,因为我收到了错误消息:

无法将类型“int”隐式转换为“System.Linq.IQueryable”

我不知道如何从 WebAPI 中的表中返回数据。

这里是Controller 代码:

public IQueryable<QR_Group> GetAllGroups()
{
    return db.GetAllGroups();
}

编辑:

新的错误信息:

无法将类型“System.Data.Entity.Core.Objects.ObjectResult‌​”隐式转换为“System.Linq.IQueryable”。存在显式转换(您是否缺少演员表?)

【问题讨论】:

  • 代码优先还是 EDMX?您的存储过程是如何在 EF 上下文中声明的?
  • @DavidTansey 我已经在 sql server management studio 中声明了存储过程

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


【解决方案1】:

我从未在 EF 中使用过存储过程,但我认为您想要的是这个

public IList<QR_Group> GetAllGroups() {
    return db.GetAllGroups().ToList();
}

【讨论】:

  • 不,它不起作用,因为它告诉存储过程返回 INT 但我需要一个包含对象的数组。我有 3 列(Id=int,name=string,code=string)
  • 列表是数组的一种形式,但您需要弄清楚 GetAllGroups 返回的是什么。如果正确设置 EF,则 EF 在调用存储过程时应该有一个模型。此模型是您需要的列表以及应通过 WebAPI 返回的内容
  • 我在 sql server management studio 中创建了存储过程。之后我用实体框架更新了我的实体数据模型。最后在控制器中定义了你在上面看到的方式。现在我收到了这个错误消息:(Cannot implicitly convert type 'System.Data.Entity.Core.Objects.ObjectResult&lt;WebApi.Models.getAllGroups_Result&gt;' to 'System.Linq.IQueryable&lt;WebApi.Models.QR_Group&gt;'. An explicit conversion exists (are you missing a cast?))
  • WebApi.Models.getAllGroups_Result 是 EF 返回的模型。这很可能也是您需要从控制器返回的模型。最好的确认方法是暂时改变你的控制器, var test = db.GetAllGroups();返回测试;在返回行上放置一个断点并调试您的项目。准确查看 GetAllGroups() 方法返回的内容。
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多