Heim >Backend-Entwicklung >C++ >Wie kann ich Tabellenwertparameter an gespeicherte Prozeduren im Entity Framework übergeben?

Wie kann ich Tabellenwertparameter an gespeicherte Prozeduren im Entity Framework übergeben?

Susan Sarandon
Susan SarandonOriginal
2025-01-12 22:01:43326Durchsuche

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

Übergabe von Tabellenwertparametern an gespeicherte Prozeduren im Entity Framework

Entity Framework selbst unterstützt die direkte Übergabe von Tabellenwertparametern an gespeicherte Prozeduren nicht nativ. Dies kann jedoch erreicht werden, indem der Befehl ObjectContext mit ExecuteStoreQuery verwendet wird.

Erstellen Sie eine universelle Lagerhaltungsmethode

Definieren Sie zunächst eine allgemeine Lagerhaltungsmethode:

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

Verwenden Sie ExecuteStoreQuery mit Tabellenwertparametern

Wenn Sie ExecuteStoreQuery mit Tabellenwertparametern verwenden, setzen Sie das SqlParameter-Attribut von SqlDbType auf Structured und das TypeName-Attribut auf den Namen des benutzerdefinierten Typs:

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

Parameter an gespeicherte Prozedur übergeben

Stellen Sie in der ExecuteStoredProcedure-Methode sicher, dass die Parameter in der richtigen Reihenfolge übergeben werden:

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

DbContext und ObjectContext

Für Entity Framework Code First muss DbContext in ObjectContext konvertiert werden, um die ExecuteStoreQuery-Methode zu verwenden:

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

Zusätzliche Hinweise

  • Jede Spalte in der benutzerdefinierten Tabelle muss übergeben werden, auch wenn sie Standardwerte hat.
  • Die an ExecuteStoreCommand übergebenen Parameter müssen in derselben Reihenfolge wie in der gespeicherten Prozedur vorliegen.

Das obige ist der detaillierte Inhalt vonWie kann ich Tabellenwertparameter an gespeicherte Prozeduren im Entity Framework übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn