Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有可选参数的实体框架?_C#_Sql_Entity Framework_Entity Framework 5 - Fatal编程技术网

C# 具有可选参数的实体框架?

C# 具有可选参数的实体框架?,c#,sql,entity-framework,entity-framework-5,C#,Sql,Entity Framework,Entity Framework 5,使用EntityFramework 5是否可以使用带有可选参数的存储过程,这样就不必为每个未使用的参数添加null 我必须使用的存储过程有87个参数,其中只需要2个。我真的很讨厌在每次调用中都必须放入85个null的想法。您可以使用方法(DbContext是ObjectContext的包装器)来执行一些存储过程并传递参数列表: FooEntities db = new FooEntities(); var objectContext = ((IObjectContextAdapter)db).O

使用EntityFramework 5是否可以使用带有可选参数的存储过程,这样就不必为每个未使用的参数添加null

我必须使用的存储过程有87个参数,其中只需要2个。我真的很讨厌在每次调用中都必须放入85个null的想法。

您可以使用方法(
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);

用法如下:
var result=db.ProcedureName(“Lazy”,29)

我正在演示@Francisco Goldenstein对答案的评论。 “EXEC SP_MySP@One、@Two、@Three、@Four”语句中的顺序应该与存储过程的参数匹配。 paraOne、paraTwo等的顺序无关紧要

public List GetMyData(int thirdValue,string firstValue)
{
var paraOne=新的SqlParameter(“@One”,firstValue);
var paraTwo=新的SqlParameter(“@Two”,DBNull.Value);
var paraThree=新的SqlParameter(“@Three”,第三个值);
var paraFour=新的SqlParameter(“@Four”,DBNull.Value);
var result=DataContext.Database.SqlQuery(“EXEC SP_MySP@One、@Two、@Three、@Four”
,paraTwo,paraOne,paraFour,paraThree);
返回结果;

}
如果有人检查此问题并使用EF6 o更高版本,您可以使用dbContext.Database.SqlQuery。如果有可选参数,可以将该值设置为DbNull.value。您可以创建用于构建SqlParameters的值,当该值为null时,它将设置DbNull.value。我希望它能帮上忙。@FranciscoGoldenstein谢谢!随着时间的推移,一切都变了)我将添加带有适当EF版本的标签到问题中
public static Result ProcedureName(this FooEntities db, name, age)
{
    // code above
}