EF如何确定可空参数

本文关键字:参数 何确定 EF | 更新日期: 2023-09-27 17:54:39

我有一个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. 添加新功能import
  4. 通过点击
  5. 按钮生成新的复合类型
  6. 在单独的模板文件上运行自定义工具(生成POCO)

EF如何确定可空参数

作为一种解决方法,您可以声明两个单独的存储过程:

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

快速查看,我在stackoverflow上找到了这个。希望能有所帮助。

实体框架4.0实体SQL传递空ObjectParameter参数

使用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());

将存储过程中的默认值设置为NULL。

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