使用 Entity Framework 5 是否可以使用带有可选参数的存储过程,这样您就不必为每个未使用的参数添加 null?
我必须使用的存储过程有 87 个参数,其中只有 2 个是必需的。我真的很讨厌在每次调用中都必须放置 85 个空值。
使用 Entity Framework 5 是否可以使用带有可选参数的存储过程,这样您就不必为每个未使用的参数添加 null?
我必须使用的存储过程有 87 个参数,其中只有 2 个是必需的。我真的很讨厌在每次调用中都必须放置 85 个空值。
您可以使用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;
}