Generating and accessing stored procedures using Entity framework core

前端 未结 5 2049
一向
一向 2020-12-28 17:50

I am implementing Asp.Net core Web API , entity framework core, database first approach using Visual Studio 2017. I have managed to generate the context and class files base

5条回答
  •  时光说笑
    2020-12-28 17:53

    My original post - https://stackoverflow.com/a/57224037/1979465

    To call a stored procedure and get the result into a list of model in EF Core, we have to follow 3 steps.

    Step 1. You need to add a new class just like your entity class. Which should have properties with all the columns in your SP. For example if your SP is returning two columns called Id and Name then your new class should be something like

    public class MySPModel
    {
        public int Id {get; set;}
        public string Name {get; set;}
    }
    

    Step 2.

    Then you have to add one DbQuery property into your DBContext class for your SP.

    public partial class Sonar_Health_AppointmentsContext : DbContext
    {
            public virtual DbSet Booking { get; set; } // your existing DbSets
            ...
    
            public virtual DbQuery MySP { get; set; } // your new DbQuery
            ...
    }
    

    Step 3.

    Now you will be able to call and get the result from your SP from your DBContext.

    var result = await _context.Query().AsNoTracking().FromSql(string.Format("EXEC {0} {1}", functionName, parameter)).ToListAsync();
    

    I am using a generic UnitOfWork & Repository. So my function to execute the SP is

    /// 
    /// Execute function. Be extra care when using this function as there is a risk for SQL injection
    /// 
    public async Task> ExecuteFuntion(string functionName, string parameter) where T : class
    {
        return await _context.Query().AsNoTracking().FromSql(string.Format("EXEC {0} {1}", functionName, parameter)).ToListAsync();
    }
    

    Hope it will be helpful for someone !!!

提交回复
热议问题