首页 > 解决方案 > 将要使用的代码更改为存储过程时,Razor Pages 无法隐式转换类型

问题描述

经过多年的网络表单,我目前正在进入 Razor Pages。

我有以下代码从 SQL Server 存储过程中检索数据:

private readonly AppDbContext context;
public List<DeviationRequests> DeviationDetails { get; set; }

public async Task<DeviationRequests> GetDeviationDetailsAsync(int id)
{
    //return await context.apiDeviationRequests.FirstOrDefaultAsync(p => p.DeviationLogID == id);
    var parameters = new List<SqlParameter>();
    parameters.Add(new SqlParameter("@SUB_ID", "5317DBA3"));
    parameters.Add(new SqlParameter("@DeviationLogID", id));

    DeviationDetails = await context.apiDeviationRequests.FromSqlRaw<DeviationRequests>("dbo.Get_WorkStationDeviationDetails @Sub_ID, @DeviationLogID", parameters: parameters.ToArray()).ToListAsync();
    return DeviationDetails;
}

起初它只是使用 linq 检索表数据来测试它,但我需要将其转换为使用存储过程。我已经注释掉了 linq 表检索。

不幸的是,通过存储过程获取数据的新代码会在以下位置产生错误:

return DeviationDetails;

错误是:

无法将类型 system.collections.generic.list <CV2.Models.DeviationRequests> 隐式转换为 CV2.Models.DeviationRequests。

请问我做错了什么?

标签: c#sql-serverasp.net-core.net-corerazor

解决方案


尝试这个:

public async Task<DeviationRequests> GetDeviationDetailsAsync(int id)
{
    //return await context.apiDeviationRequests.FirstOrDefaultAsync(p => p.DeviationLogID == id);
    var parameters = new List<SqlParameter>();
    parameters.Add(new SqlParameter("@SUB_ID", "5317DBA3"));
    parameters.Add(new SqlParameter("@DeviationLogID", id));

    DeviationDetails = await context.apiDeviationRequests.FromSqlRaw<DeviationRequests>("dbo.Get_WorkStationDeviationDetails @Sub_ID, @DeviationLogID", parameters: parameters.ToArray()).ToListAsync();

    return DeviationDetails.FirstOrDefault();
}

推荐阅读