Search code examples
stored-proceduresentity-framework-coreasp.net-core-mvcef-power-tools

Stored procedure "weird" result set with Power Tools EF Core 5


I have installed EF Core 5 Power Tools to Add a DB with stored procedure to an ASP.NET Core project. the models are successfully generated by Power Tools and the tables work fine; but when i try to retrieve a result set out of a stored procedure and store it to a ViewBag to display on the View, the value stored at Viewbag is weird and has nothing to do with a result set. Here is the stored procedure code at db, which is pretty simple, just to test Power Tools:

CREATE PROCEDURE retTable (@P INT)
AS
BEGIN
SELECT * FROM STU WHERE ID=@P;
END;

Controller:

  public IActionResult Index()
        {
            schoolContext s = new schoolContext();
            schoolContextProcedures sp = new schoolContextProcedures(s);
            var t = sp.retTableAsync(20); // The built is perfectly done, but the value store instead of result set is weird
            ViewBag.test = t;      
            return View();
        }

and just added a @View.Bag to the view to make sure it's displayed, Though the app's built is done successfully without any error, This is what's displayed at the View instead of ViewBag value:

System.Runtime.CompilerServices.AsyncTaskMethodBuilder1+AsyncStateMachineBox1[System.Collections.Generic.List`1[WebApplication2.Models.DB.retTableResult],WebApplication2.Models.DB.schoolContextProcedures+d__3]

Tried to convert the result set to a list or something else but it's not working :| Anyone know how to fix it?


Solution

  • The value stored in it is not "weird", its a Task. Since your method is async, you should await for the result of the returned task, not the "return" itself, as this is only a reference to the task that is executed asynchronusly.

    As martin smith mentions, just:

    var t = await sp.retTableAsync(20);
    

    Otherwise you are adding a task as the viewbag property, instead of the task result once completed