Entity Framework のストアド プロシージャにテーブル値パラメーターを渡す
Entity Framework 自体は、テーブル値パラメーターをストアド プロシージャに直接渡すことをネイティブにサポートしていません。ただし、これは、ObjectContext
コマンドを ExecuteStoreQuery
とともに使用することで実現できます。
ユニバーサルな倉庫保管方法を作成する
まず、一般的な倉庫方法を定義します。
<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>
テーブル値パラメーターで ExecuteStoreQuery を使用する
テーブル値パラメーターで ExecuteStoreQuery
を使用する場合は、SqlParameter
の SqlDbType
属性を Structured
に設定し、TypeName
属性をユーザー定義型の名前に設定します:
<code class="language-csharp">var warnings = new SqlParameter("warnings", SqlDbType.Structured); warnings.Value = dt; warnings.TypeName = "dbo.udt_Warnings";</code>
ストアド プロシージャにパラメータを渡す
ExecuteStoredProcedure
メソッドで、パラメータが正しい順序で渡されていることを確認してください:
<code class="language-csharp">entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>
DbContext と ObjectContext
Entity Framework コードの場合 まず、DbContext
メソッドを使用するには、ObjectContext
を ExecuteStoreQuery
に変換する必要があります。
<code class="language-csharp">var entities = (ObjectContext)context; entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>
追加メモ
ExecuteStoreCommand
に渡されるパラメーターは、ストアド プロシージャ内と同じ順序である必要があります。 以上がEntity Framework のストアド プロシージャにテーブル値パラメーターを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。