0

パラメータとして int を取るストアド プロシージャがあります。私はMVCとともにエンティティフレームワークコードを最初に使用しており、この方法で呼び出しを行っています

        SqlParameter sa = new SqlParameter("@userId", userId);
        var query = from dashboardData in TBSCIDBContext.Database.SqlQuery<MyNomination>("sp_GetMyNominationList @userId", sa)
                    select dashboardData;
        return query.ToList();

プロファイラーで私が得る

exec sp_executesql N'sp_GetMyNominationList @userId',N'@userId int',@userId=4  

これはSQL Server 2008を使用して正しく実行されますが、現在、私のデータベースは2005に変更されており、同じexecステートメントで

'sp_GetMyNominationList' 付近の構文が正しくありません。私は2005年にそれを実行しているからです。

2005 を使用する必要があります。パラメーターが SQL プロファイラーによって正しく取得されるように、2005 でこれを実行する方法を教えてください。

4

2 に答える 2

0

私の質問への答えは

  SqlParameter sa = new SqlParameter("@userId", userId);
            var query = from dashboardData in TBSCIDBContext.Database.SqlQuery<MyNomination>("exec sp_GetMyNominationList @userId=@userId", sa)
                        select dashboardData;

これは機能します

于 2013-01-08T14:35:45.463 に答える
0

EntityFramework を使用して、ストアド プロシージャをマップする必要があります。現在、コードとデータベースの間にレイヤーを提供するというEFのポイント全体を回避しているだけです。EntityFramework は、ストアド プロシージャ名を使用してメソッド呼び出しを作成します。これは、ストアド プロシージャが必要とするパラメーターを受け取ります。

于 2012-10-26T11:11:06.737 に答える