Entity Framework с необязательными параметрами?

использование Entity Framework 5 Можно ли использовать хранимый proc с необязательными параметрами, чтобы не добавлять null для каждого неиспользуемого параметра?

сохраненный proc, который я должен использовать, имеет 87 параметров, только 2 из которых требуются. Я действительно ненавижу идею о том, чтобы поставить 85 нулей в каждом вызове.

2 ответов


можно использовать ObjectContext.ExecuteFunction метод (DbContext обертка поверх ObjectContext) выполнить некоторую хранимую процедуру и передать список параметров:

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

вы можете обернуть этот код в метод расширения для вашего DbContext:

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

использование будет как: var result = db.ProcedureName("Lazy", 29);


я демонстрирую @Francisco Goldenstein комментарий к ответу. Порядок в инструкции" EXEC SP_MySP @One, @Two, @Three, @Four " должен соответствовать параметру хранимой процедуры. Порядок paraOne, paraTwo и т. д. не имеет значения.

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