【问题标题】:How to add stored procedures to Entity Framework Core DbContext?如何将存储过程添加到 Entity Framework Core DbContext?
【发布时间】:2020-04-03 17:52:32
【问题描述】:

我正在将我的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

【问题讨论】:

    标签: c# .net-core entity-framework-6 entity-framework-core


    【解决方案1】:

    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" });
    

    【讨论】:

    • 有了这个我需要选择一个特定的实体。有没有办法在不选择实体的情况下运行存储过程?像 context.FromSql("StoredProcedureName") 之类的东西?
    • @GlobalJim,如果我回答了你的问号,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    相关资源
    最近更新 更多