11

テーブル値パラメーターを使用するEntityFrameworkからストアド プロシージャを呼び出そうとしています。

しかし、関数のインポートを行おうとすると、次のような警告メッセージが表示され続けます-

関数 'InsertPerson' には、パラメーター インデックス 0 にパラメーター 'InsertPerson_TVP' があります。このパラメーターは、ターゲットの .NET Framework バージョンで現在サポートされていないデータ型 'テーブル タイプ' を持っています。関数は除外されました。

ここで最初の検索を行ったところ、EntityFrameWork でいくつかの回避策が可能であり、現在のバージョンではサポートされていないと言う投稿はほとんど見つかりませんでした。

この問題に対するより良いアプローチまたは解決策を知っている人はいますか?

4

3 に答える 3

18

私はこれをやってしまった、私たちはEFに取り組んでいることに注意してくださいDataContext(ではないObjectContext

出力パラメータを使用したスト​​アド プロシージャの実行

       using (DataContext context = new DataContext())
        {                  
          ////Create table value parameter
          DataTable dt = new DataTable();
          dt.Columns.Add("Displayname");
          dt.Columns.Add("FirstName");
          dt.Columns.Add("LastName");
          dt.Columns.Add("TimeStamp");

          DataRow dr = dt.NewRow();
          dr["Displayname"] = "DisplayName";
          dr["FirstName"] = "FirstName";
          dr["LastName"] ="LastName";
          dr["TimeStamp"] = "TimeStamp";             
          dt.Rows.Add(dr);

          ////Use DbType.Structured for TVP
          var userdetails = new SqlParameter("UserDetails", SqlDbType.Structured);
          userdetails.Value = dt;
          userdetails.TypeName = "UserType";

          ////Parameter for SP output
          var result = new SqlParameter("ResultList", SqlDbType.NVarChar, 4000);
          result.Direction = ParameterDirection.Output;

          context.Database.ExecuteSqlCommand("EXEC UserImport @UserDetails, @ResultList OUTPUT", userdetails, result);

          return result == null ? string.Empty : result.Value.ToString();
        }

私のTable-Value-Parameter (UDT テーブル) スクリプトは次のようになります。

CREATE TYPE [dbo].[UserType] AS TABLE (
    [DisplayName]      NVARCHAR (256)   NULL,
    [FirstName]        NVARCHAR (256)   NULL,
    [LastName]         NVARCHAR (256)   NULL,
    [TimeStamp]        DATETIME         NULL
   )

そして、私のストアプロシージャは次のように始まります

CREATE PROCEDURE UserImport 
-- Add the parameters for the stored procedure here
@UserDetails UserType Readonly,
@ResultList NVARCHAR(MAX) output  
AS

パラメータのないストアド プロシージャの場合、output出力パラメータを SP に追加/渡す必要はありません。

それが誰かに役立つことを願っています。

于 2013-01-29T08:52:20.290 に答える