EF如何确定可以为空的参数?

时间:2011-05-04 21:46:45

标签: c# tsql entity-framework-4 poco

我有一个SQL存储过程,我需要能够将NULL作为一个值传递给它的一个参数,以便在这样的查询中使用:

create procedure sp
    @param1 varchar(30)
as
select * from table where field = isnull(@param1, field)

所以我需要告诉EF如何使@param1可以为空。我该怎么做?

谢谢!

如果它有帮助,我与EF一起使用的过程是:

  1. 创建SP
  2. 更新型号(edmx)
  3. 添加新功能导入
  4. 点击按钮
  5. 生成新的复杂类型
  6. 在单独的模板文件上运行自定义工具(以生成POCO)

4 个答案:

答案 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)