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