Как добавить хранимые процедуры в Entity Framework Core DbContext? - PullRequest
1 голос
/ 03 апреля 2020

Я в процессе преобразования DbContext из EF 6 в EF Core. В моем DbContext есть хранимые процедуры, определенные так:

public virtual ObjectResult<Nullable<int>> StoredProcedureOne(Nullable<int> maxValue, Nullable<int> minValue)
{
    var maxValueParameter = maxValue.HasValue ?
            new ObjectParameter("MaxValue", maxValue) :
            new ObjectParameter("MaxValue", typeof(int));

    var minValueParameter = minValue.HasValue ?
            new ObjectParameter("MinValue", minValue) :
            new ObjectParameter("MinValue", typeof(int));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>>("StoredProcedureOne", maxValueParameter, minValueParameter);
}

Как я могу определить хранимую процедуру в EF Core? Все примеры, которые я смог найти, являются хранимыми процедурами для конкретной c сущности. Из того, что я видел до сих пор, выглядит необходимость создания нового экземпляра моего контекста в каждом методе и преобразования ObjectParameter в SqlParameter.

1 Ответ

2 голосов
/ 03 апреля 2020

EF Core предоставляет следующие методы для выполнения хранимой процедуры:

  1. DbSet.From Sql ()
  2. DbContext.Database.ExecuteSqlCommand ()

Пример:

var context = new SchoolContext(); 
var param = new SqlParameter("@FirstName", "Bill");
//or
/*var param = new SqlParameter() {
                    ParameterName = "@FirstName",
                    SqlDbType =  System.Data.SqlDbType.VarChar,
                    Direction = System.Data.ParameterDirection.Input,
                    Size = 50,
                    Value = "Bill"
};*/

    var students = context.Students.FromSql("GetStudents @FirstName", param).ToList();

Пример ExecuteSqlCommand

var context = new SchoolContext();     
context.Database.ExecuteSqlCommand("CreateStudents @p0, @p1", parameters: new[] { "Bill", "Gates" });
...