实体框架带有可选参数?

时间:2013-06-20 18:00:35

标签: c# sql entity-framework entity-framework-5

使用Entity Framework 5是否可以使用带有可选参数的存储过程,这样您就不必为每个未使用的参数添加空值?

我必须使用的存储过程有87个参数,其中只有2个是必需的。我真的很讨厌在每个电话中放入85个空值的想法。

2 个答案:

答案 0 :(得分:7)

您可以使用ObjectContext.ExecuteFunction方法(DbContextObjectContext的包装器)来执行一些存储过程并传递参数列表:

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

答案 1 :(得分:1)

我正在展示@Francisco Goldenstein对答案的评论。 订单在&#34; EXEC SP_MySP @ One,@ Two,@ Threehree,@ Four&#34;语句应该与您的存储过程的参数匹配。 paraOne,paraTwo等的顺序并不重要。

&#13;
&#13;
         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;
          
        }
&#13;
&#13;
&#13;