Entity Framework はテーブル値パラメーターの受け渡しを直接サポートしていませんが、ObjectContext
コマンドを使用して回避策を実装できます。 ExecuteStoreQuery
カスタマイズされた EF 倉庫管理方法
次の汎用 EF ウェアハウス メソッドを使用すると、テーブル値パラメーターを含むストアド プロシージャを実行できます。
<code class="language-csharp">public IEnumerable<T> ExecuteStoredProcedure<T>(string procedureName, params object[] parameters) { StringBuilder command = new StringBuilder(); command.Append("EXEC "); command.Append(procedureName); command.Append(" "); // 为每个参数添加占位符 for (int i = 0; i < parameters.Length; i++) { if (i > 0) command.Append(","); command.Append("{" + i + "}"); } return this.context.ExecuteStoreQuery<T>(command.ToString(), parameters); }</code>
カスタムのテーブル値パラメーター
問題の説明で述べたように、テーブル値パラメーターには特定の構成が必要です。
SqlParameter
SqlDbType
に設定する必要があります。 Structured
TypeName
テーブル値パラメータを使用してStoreQueryを実行する
次のコードは、 を使用してテーブル値パラメーターを渡す方法を示しています。
ExecuteStoreQuery
<code class="language-csharp">dt.Rows.Add("EO01", 9, 4, 0); dt.Rows.Add("EO00", 9, 4, 0); dt.Rows.Add("EO02", 9, 4, 0); var warnings = new SqlParameter("warnings", SqlDbType.Structured); warnings.Value = dt; warnings.TypeName = "dbo.udt_Warnings"; entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>ObjectContext のストアド プロシージャ実行拡張メソッド
または、
の拡張メソッドを作成できます:
ObjectContext
<code class="language-csharp">public static void ExecuteStoredProcedure(this ObjectContext context, string storedProcName, params object[] parameters) { string command = "EXEC " + storedProcName + " @caseid, @userid, @warnings"; context.ExecuteStoreCommand(command, parameters); }</code>を直接使用して、テーブル値パラメーターを含むストアド プロシージャを実行できます。
ObjectContext
Entity Framework Code First を使用している場合は、
を に変換することで DbContext
メソッドにアクセスできます。ただし、EntityFrameworkExtras と呼ばれるライブラリは、Code First 環境でテーブル値パラメーターを処理するためのより便利な方法を提供します。 ObjectContext
以上がEntity Framework のストアド プロシージャ テーブル値パラメーターを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。