在 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 Code First,需要將 DbContext
轉換為 ObjectContext
才能使用 ExecuteStoreQuery
方法:
<code class="language-csharp">var entities = (ObjectContext)context; entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>
附加說明
ExecuteStoreCommand
的參數必須與預存程序中的順序一致。 以上是如何將表值參數傳遞給實體框架中的預存程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!