Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Melewati Parameter Bernilai Jadual kepada Prosedur Tersimpan dalam Rangka Kerja Entiti?

Bagaimanakah Saya Boleh Melewati Parameter Bernilai Jadual kepada Prosedur Tersimpan dalam Rangka Kerja Entiti?

Susan Sarandon
Susan Sarandonasal
2025-01-12 22:01:43380semak imbas

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

Melalukan parameter bernilai jadual kepada prosedur yang disimpan dalam Rangka Kerja Entiti

Rangka Kerja Entiti sendiri secara asalnya tidak menyokong menghantar parameter bernilai jadual terus kepada prosedur yang disimpan. Walau bagaimanapun, ini boleh dicapai dengan menggunakan perintah ObjectContext dengan ExecuteStoreQuery.

Buat kaedah pergudangan universal

Pertama, tentukan kaedah pergudangan am:

<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>

Gunakan ExecuteStoreQuery dengan parameter bernilai jadual

Apabila menggunakan ExecuteStoreQuery dengan parameter bernilai jadual, tetapkan atribut SqlParameter SqlDbType kepada Structured dan atribut TypeName kepada nama jenis yang ditentukan pengguna:

<code class="language-csharp">var warnings = new SqlParameter("warnings", SqlDbType.Structured);
warnings.Value = dt;
warnings.TypeName = "dbo.udt_Warnings";</code>

Lepaskan parameter ke prosedur tersimpan

Dalam kaedah ExecuteStoredProcedure, pastikan parameter dihantar dalam susunan yang betul:

<code class="language-csharp">entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>

DbContext dan ObjectContext

Untuk Kod Rangka Kerja Entiti Pertama, DbContext perlu ditukar kepada ObjectContext untuk menggunakan kaedah ExecuteStoreQuery:

<code class="language-csharp">var entities = (ObjectContext)context;
entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>

Nota Tambahan

  • Setiap lajur dalam jadual yang ditentukan pengguna mesti dihantar, walaupun ia mempunyai nilai lalai.
  • Parameter yang dihantar kepada ExecuteStoreCommand mestilah dalam susunan yang sama seperti dalam prosedur yang disimpan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melewati Parameter Bernilai Jadual kepada Prosedur Tersimpan dalam Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn