首頁 >後端開發 >C++ >如何將表值參數傳遞給實體框架中的預存程序?

如何將表值參數傳遞給實體框架中的預存程序?

Susan Sarandon
Susan Sarandon原創
2025-01-12 22:01:43329瀏覽

How Can I Pass Table-Valued Parameters to Stored Procedures in Entity Framework?

在 Entity Framework 中傳遞表值參數到預存程序

Entity Framework 本身並不會原生支援直接向預存程序傳遞表格值參數。然而,這可以透過使用 ObjectContextExecuteStoreQuery 命令來實現。

建立通用的倉儲方法

首先,定義一個通用的倉儲方法:

<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 和表值參數時,將 SqlParameterSqlDbType 屬性設定為 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn