Search code examples
c#sql-serverasp.net-core.net-corerazor

Razor Pages Cannot implicitly convert type when changing code to use to stored procedure


I'm currently getting into Razor Pages after many years of webforms.

I have the following code that retrieves data from a SQL Server stored procedure:

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;
}

At first it was just retrieving table data using linq to test it out, but I need to convert it to use a stored procedure. I've commented the linq table retrieval out.

Unfortunately the new code to get the data via a stored procedure produces an error on:

return DeviationDetails;

The error is:

Cannot implicitly convert type system.collections.generic.list <CV2.Models.DeviationRequests> to CV2.Models.DeviationRequests.

What am I doing wrong please?


Solution

  • Try this:

    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();
    }