首页 文章

C#MVC EF错误 - 数据读取器不兼容的类型成员在数据读取器中没有相应的列具有相同的名称

提问于
浏览
0

我正在尝试第一次创建存储过程,但我无法做到正确 . 所以我有一个proc,它根据输入的参数从db返回一个计数 . 我不确定我做错了什么,如果SQL错了或者我错误地映射了这个函数 . 这是我的SQL:

USE [AuditTracker_Codegen]
GO
/****** Object:  StoredProcedure [dbo].[GetAllFindingsCount]    Script Date: 05/12/2016 08:43:18 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[GetAllFindingsCount](@ReportId int, @Priority int, @IsDeleted bit)

AS
BEGIN


-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT COUNT(*)
from [dbo].[App_Finding] finding
 WHERE finding.ReportId = @ReportId and finding.Priority = @Priority and finding.IsDeleted = @IsDeleted
END

首先,这个SQL查询看起来是否合适?我在SSMS中执行它似乎返回了正确的结果 .

然后我去VS,从数据库更新模型,添加存储过程 . 然后我转到模型浏览器中的Function Imports,右键单击Add Function Import . 从下拉列表中选择存储过程,单击“获取列信息”,然后按“创建新的复杂类型” . 给这个东西命名,然后按OK . 据我所知,那应该是它,对吧?还是我错了?

在我的代码中,我尝试

var context = new AuditTrackerDatabaseContext();
var findingsOne = context.GetAllFindingsCount_Result(report.ReportId,
                        (int) PriorityStatus.One, false).ToString();

这就是我得到上述错误的地方 . 当我在edmx上检查这个proc的映射细节时,它说

Maps to GetAllFindingsCount                 Column
Column1 : Int32                     <-      Column1

有人能告诉我这里我做错了什么,为什么它不起作用?

1 回答

  • 1

    您可能需要为计数值指定一个名称,如下所示:

    SELECT COUNT(*) AS RESULT_OF_COUNT
    from ...
    

相关问题