如何将存储过程添加到 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 提供了以下方法来执行存储过程:
- DbSet.FromSql()
- 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" });
我正在将我的 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 提供了以下方法来执行存储过程:
- DbSet.FromSql()
- 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" });