Entity Framework with optional parameters?

前端 未结 2 538
我在风中等你
我在风中等你 2021-01-18 03:59

Using Entity Framework 5 is it possible to use a stored proc with optional parameters such that you do not have to add a null for each unused parameter?

The stored p

相关标签:
2条回答
  • 2021-01-18 04:55

    You can use ObjectContext.ExecuteFunction method (DbContext is a wrapper over ObjectContext) to execute some stored procedure and pass list of parameters:

    FooEntities db = new FooEntities();
    var objectContext = ((IObjectContextAdapter)db).ObjectContext;
    // create all parameters you need
    var name = new ObjectParameter("Name", "Lazy");
    var age = new ObjectParameter("Age", 29);
    
    // call stored procedure with these two parameters only
    var result = objectContext.ExecuteFunction<Result>("ProcedureName", name, age);
    

    You can wrap this code into extension method for your DbContext:

    public static Result ProcedureName(this FooEntities db, name, age)
    {
        // code above
    }
    

    Usage will be like: var result = db.ProcedureName("Lazy", 29);

    0 讨论(0)
  • 2021-01-18 04:56

    I am demonstrating @Francisco Goldenstein comment on the answer. The order in "EXEC SP_MySP @One, @Two, @Three, @Four" statement should match your stored procedure's parameter. The order of paraOne, paraTwo, etc doesn't matter.

             public List<MySPEntity> GetMyData(int thirdValue, string firstValue)
            {
                    var paraOne = new SqlParameter("@One", firstValue);
                    var paraTwo = new SqlParameter("@Two", DBNull.Value);
                    var paraThree = new SqlParameter("@Three", thirdValue);
                    var paraFour = new SqlParameter("@Four", DBNull.Value);
    
                    var result = DataContext.Database.SqlQuery<MySPEntity>("EXEC SP_MySP @One, @Two, @Three, @Four"
                    , paraTwo, paraOne, paraFour,paraThree).ToList();
    
                    return result;
              
            }

    0 讨论(0)
提交回复
热议问题