使用WebApi EntityFrameWorkCore 1.1进行存储过程调用获取并且对象不是整数结果
我有以下用户定义的过程从数据库调用带有2个参数的计算数据以返回一个整数(Count(*))
USE [QIIS2]
GO
PROCEDURE [dbo].[sp.GetCansTotals]
@hospitalId int
AS
BEGIN
SET NOCOUNT ON;
SELECT COUNT(*) AS TotalCancelled
FROM Cans
WHERE hospitalId = @hospitalId;
END
调用该过程的存储库:
public async Task GetCansTotals(int hospitalId)
{
using (appContext)
{
var hospitalid = new SqlParameter("@hospitalId", 1);
var cans = appContext.Cans.FromSql("Exec GetCansTotals @hospitalId", hospitalId);
}
}
和控制器:
[HttpGet("byParams")]
public IActionResult GetCanTotal(int hospitalId)
{
var res = _unitOfWork.Cans.GetCansTotals(hospitalId);
return Ok(res);
}
用邮递员传递请求时:
http://localhost:56963/api/cansdatas/byParams?hospitalId=2 我得到一个对象而不是COUNT(*)
的结果{
"result": {},
"id": 1,
"exception": null,
"status": 5,
"isCanceled": false,
"isCompleted": true,
"creationOptions": 0,
"asyncState": null,
"isFaulted": false
}
你能帮帮忙吗?
答案 0 :(得分:0)
您的代码存在一些问题。这是你可以做的 -
您也可以在没有存储过程但使用LINQ的情况下返回计数。 同时将方法的返回类型更改为Task并使其为异步。
public async Task<int> GetCansTotals(int hospitalId)
{
using (appContext)
{
return appContext.Cans.CountAsync(c => c.HospitalId == hospitalId);
}
}
考虑将控制器方法标记为异步,并使用await调用存储库方法。您还需要将控制器方法的返回类型更改为Task。
[HttpGet("byParams")]
public async Task<IActionResult> GetCanTotal(int hospitalId)
{
var res = await this._unitOfWork.GetCansTotals(hostpitalId);
return Ok(res);
}