Während Entity Framework die Übergabe von Tabellenwertparametern nicht direkt unterstützt, kann mit dem Befehl ObjectContext
eine Problemumgehung implementiert werden. ExecuteStoreQuery
Maßgeschneiderte EF-Lagerhaltungsmethode
Mit den folgenden generischen EF-Warehousing-Methoden können Sie gespeicherte Prozeduren ausführen, die Tabellenwertparameter enthalten:
<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>
Benutzerdefinierte Tabellenwertparameter
Wie in der Problembeschreibung erwähnt, erfordern Tabellenwertparameter eine spezifische Konfiguration:Der Parameter
SqlParameter
SqlDbType
gesetzt sein. Structured
TypeName
ExecuteStoreQuery mit Tabellenwertparametern
Der folgende Code zeigt, wie zum Übergeben von Tabellenwertparametern verwendet wird: ExecuteStoreQuery
<code class="language-csharp">dt.Rows.Add("EO01", 9, 4, 0); dt.Rows.Add("EO00", 9, 4, 0); dt.Rows.Add("EO02", 9, 4, 0); var warnings = new SqlParameter("warnings", SqlDbType.Structured); warnings.Value = dt; warnings.TypeName = "dbo.udt_Warnings"; entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId);</code>
Die Ausführungserweiterungsmethode für gespeicherte Prozeduren von ObjectContext
Alternativ können Sie eine Erweiterungsmethode für erstellen: ObjectContext
<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>
direkt verwenden, um eine gespeicherte Prozedur auszuführen, die Tabellenwertparameter enthält. ObjectContext
Code First-Kompatibilität
Wenn Sie Entity Framework Code First verwenden, können Sie auf die-Methode zugreifen, indem Sie DbContext
in ObjectContext
konvertieren. Eine Bibliothek namens EntityFrameworkExtras bietet jedoch eine bequemere Möglichkeit, Tabellenwertparameter in einer Code First-Umgebung zu verarbeiten. ExecuteStoreQuery
Das obige ist der detaillierte Inhalt vonWie implementiert man die Wertparameter der gespeicherten Prozedurtabelle von Entity Framework?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!