我有一个SQL存储过程,我需要能够将NULL
作为一个值传递给它的一个参数,以便在这样的查询中使用:
create procedure sp
@param1 varchar(30)
as
select * from table where field = isnull(@param1, field)
所以我需要告诉EF如何使@param1
可以为空。我该怎么做?
谢谢!
如果它有帮助,我与EF一起使用的过程是:
答案 0 :(得分:2)
作为解决方法,您可以声明两个单独的存储过程:
-- use this for non-null parameters
create procedure sp
@param1 varchar(30)
as
select * from table where field = @param1
-- use this for null
create procedure sp_null
as
select * from table
然后你可以用C#编写所需的抽象:
public ... GetSp(string param1)
{
if (param1 == null)
return ....sp_null();
else
return ....sp(param1);
}
答案 1 :(得分:1)
快速查看,我在stackoverflow上找到了这个。希望它有所帮助。
Entity Framework 4.0 Entity SQL passing null ObjectParameter parameters
答案 2 :(得分:1)
使用DBNull.Value
,我已经完成了我的一个存储过程。要调用您的程序,我的代码将如下所示:
List<ObjectParameter> objectParameterList = new List<ObjectParameter>();
if (string.IsNullOrEmpty(param1))
{
object nullValue = DBNull.Value;
objectParameterList.Add(new ObjectParameter("param1", nullValue));
}
else
{
objectParameterList.Add(new ObjectParameter("param1", param1));
}
context.ExecuteFunction("MyEFModel.sp", objectParameterList.ToArray());
希望这有帮助。
答案 3 :(得分:0)
将存储过程中的默认值设置为NULL。
create procedure sp
@param1 varchar(30) =NULL
as
select * from table where field = isnull(@param1, field)