web-dev-qa-db-ja.com

EntityFrameworkでnullパラメータ値を使用してストアドプロシージャを呼び出す

sqlserver 2008にストアドプロシージャがあり、パラメータの1つがnull値を受け入れます。パラメータにnull値を指定してSPを呼び出す方法がわかりません。もう少しコンテキストを増やすために、EntityFramework6xxを使用しています

次の例では、パラメーター "@ status、@ Compatible"の値をnullにすることができますが、これらのプララムが提供されなかったという例外が発生します。

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();
15
Flavio Oliveira

私は同じ問題に遭遇しました。値がnullの場合、デフォルトがロードされます。私は実際にnullが必要だったので、ステータスについては以下で実行できるはずです。

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

より詳細な例については、この回答を確認してください https://stackoverflow.com/a/4556007/1248536

27
DeadlyChambers