繁体   English   中英

如何将存储过程添加到 Entity Framework Core DbContext?

[英]How to add stored procedures to Entity Framework Core DbContext?

我正在将我的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 中定义存储过程? 我能找到的所有示例都是特定实体的存储过程。 从我目前看到的情况来看,似乎需要在每个方法中创建我的上下文的新实例并将ObjectParameter转换为SqlParameter

EF Core 提供了以下方法来执行存储过程:

  1. DbSet.FromSql()
  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" });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM