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

Wie übergebe ich Tabellenwertparameter an gespeicherte Prozeduren im Entity Framework?

Patricia Arquette
Freigeben: 2025-01-12 22:06:43
Original
296 Leute haben es durchsucht

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

Entity Framework gespeicherte Prozedurtabellenwertparameter

Entity Framework selbst unterstützt die Übergabe von Tabellenwertparametern an gespeicherte Prozeduren nicht direkt. Eine Problemumgehung kann jedoch mithilfe der ObjectContext-Methode von ExecuteStoreQuery implementiert werden.

Im obigen Code gibt es eine allgemeine ExecuteStoredProcedure-Methode im Repository:

<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>
Nach dem Login kopieren

Beim Übergeben von Tabellenwertparametern mit dieser Methode erhalten Sie möglicherweise Fehlermeldungen wie „Der Tabellentypparameter p6 muss einen gültigen Typnamen haben“. Um dieses Problem zu beheben, müssen Sie SqlDbType als Structured angeben und SqlParameter.TypeName auf den Namen des benutzerdefinierten Typs (UDT) in der Datenbank festlegen.

Allerdings können trotz dieser Änderungen immer noch Fehler im Zusammenhang mit ungültiger Syntax auftreten.

Benutzerdefinierte Erweiterungsmethode

Eine benutzerdefinierte Erweiterungsmethode der Klasse

ObjectContext kann diesen Prozess vereinfachen:

<code class="language-csharp">public static void ExecuteStoredProcedure(this ObjectContext context, string storedProcName, params object[] parameters)
{
    string command = "EXEC " + storedProcName + " @caseid, @userid, @warnings";

    context.ExecuteStoreCommand(command, parameters);
}</code>
Nach dem Login kopieren

Mit dieser Erweiterungsmethode können Sie gespeicherte Prozeduren direkt mit Tabellenwertparametern aufrufen. Beispielverwendung ist wie folgt:

<code class="language-csharp">var entities = new NewBusinessEntities();

var dt = new DataTable();
dt.Columns.Add("WarningCode");
dt.Columns.Add("StatusID");
dt.Columns.Add("DecisionID");
dt.Columns.Add("Criticality");

dt.Rows.Add("EO01", 9, 4, 0);
dt.Rows.Add("EO00", 9, 4, 0);
dt.Rows.Add("EO02", 9, 4, 0);

var caseId = new SqlParameter("caseid", SqlDbType.Int);
caseId.Value = 1;

var userId = new SqlParameter("userid", SqlDbType.UniqueIdentifier);
userId.Value = Guid.Parse("846454D9-DE72-4EF4-ABE2-16EC3710EA0F");

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

entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>
Nach dem Login kopieren

Einschränkungen

Wenn Sie diese Erweiterungsmethode oder ähnliche benutzerdefinierte Methoden verwenden, beachten Sie bitte die folgenden Einschränkungen:

  • Die Parameter der gespeicherten Prozedur müssen in Ordnung sein und den an die Erweiterungsmethode übergebenen Parametern entsprechen.
  • Alle Spalten im UDT müssen angegeben werden, auch wenn sie Standardwerte haben.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage