使用EntityFramework使用null参数值调用存储过程

时间:2015-03-31 16:25:19

标签: entity-framework stored-procedures parameters null

我在sqlserver 2008上有一个存储过程,其中一个参数接受空值。我不知道如何在参数上使用空值调用该SP。为了更多的背景,我使用EntityFramework 6xx

在下一个例子中,参数" @status,@ Compatible"可以将null作为值,但我只是得到一个例外,说没有提供那些prarams。

public override IList<MyOutputType> SearchStuff(string Term, int? status, bool? Compatible, long TMPLDMID, int RangeFrom, int RangeTo)
{
    List<SqlParameter> par = new List<SqlParameter>();
    par.Add(new SqlParameter("@Term", System.Data.SqlDbType.VarChar, 50) { Value = "%" + Term + "%" });
    par.Add(new SqlParameter("@status", System.Data.SqlDbType.Int) { Value = status, IsNullable = true });
    par.Add(new SqlParameter("@Compatible", Compatible) { IsNullable = true });
    par.Add(new SqlParameter("@TMPLDMID", TMPLDMID));
    par.Add(new SqlParameter("@RangeFrom", RangeFrom));
    par.Add(new SqlParameter("@RangeTo", RangeTo));

    return db.Database.SqlQuery<MyOutputType>(
        "EXEC [spSearchForStuff] @Term, @status, @Compatible, @TMPLDMID, @RangeFrom, @RangeTo", par.ToArray()
    ).ToList();

1 个答案:

答案 0 :(得分:23)

我遇到了同样的问题。如果值为null,则会加载默认值。我实际上需要一个null,所以对于你应该能够在下面做的状态。

par.Add(new SqlParameter("@status", (object)status??DBNull.Value);

查看此答案以获取更深入的示例https://stackoverflow.com/a/4556007/1248536