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
Lepaskan: 2025-01-12 22:01:43
asal
394 orang telah melayarinya

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:

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);
}
Salin selepas log masuk

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:

var warnings = new SqlParameter("warnings", SqlDbType.Structured);
warnings.Value = dt;
warnings.TypeName = "dbo.udt_Warnings";
Salin selepas log masuk

Lepaskan parameter ke prosedur tersimpan

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

entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);
Salin selepas log masuk

DbContext dan ObjectContext

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

var entities = (ObjectContext)context;
entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan