Skip to content

Beiträge

Aufrufen von gespeicherten Prozeduren mit Code First

16. Oktober 2014 • 2 min Lesezeit

Aufrufen von gespeicherten Prozeduren mit Code First

Eine der Schwächen von Entity Framework 6 Code First ist die fehlende Unterstützung für das native Aufrufen von Datenbankstrukturen (Ansichten, gespeicherte Prozeduren… usw.). Für diejenigen, die Code-First in Entity Framework (EF) nicht kennen oder nicht verwendet haben, ist Code-First einfach eine Fluent-Mapping-API. Die Idee besteht darin, alle Ihre Datenbankzuordnungen im Code (z. B. C#) zu erstellen, und das Framework erstellt dann die Datenbankschema und verfolgt die Änderungen.

Im traditionellen Entity Framework würden Sie eine gespeicherte Prozedur in Ihrer EDMX-Datei zuordnen. Dies ist ein mehrstufiger Prozess. Nach Abschluss des Prozesses wird eine Methode erstellt, die vom DataContext abhängt.

Ich habe versucht, das Aufrufen einer gespeicherten Prozedur zu vereinfachen. Im Kern einer gespeicherten Prozedur haben Sie einen Prozedurnamen, N Anzahl von Parametern und ein Resultset. Ich habe eine kleine Erweiterungsmethode geschrieben, die einen Prozedurnamen, Parameter und einen Rückgabetyp akzeptiert. Es funktioniert einfach. Keine Zuordnung der Prozedur und ihrer Parameter.

public static List<TReturn> CallStoredProcedure<TParameters, TReturn>(this DataContext context, string storedProcedure, TParameters parameters) where TParameters : class where TReturn : class, new()
{
IDictionary<string,object> procedureParameters = new Dictionary<string, object>();
PropertyInfo[] properties = parameters.GetType().GetProperties();

var ps = new List<object>();

foreach (var property in properties)
{
object value = property.GetValue(parameters);
string name = property.Name;

procedureParameters.Add(name, value);

ps.Add(new SqlParameter(name, value));
}

var keys = procedureParameters.Select(p => string.Format("@{0}", p.Key)).ToList();
var parms = string.Join(", ", keys.ToArray());

return context.Database.SqlQuery<TReturn>(storedProcedure + " " + parms, ps.ToArray()).ToList();
}

Verwendung

var context = new DataContext();

List<User> users = context.CallStoredProcedure<object,User>("User_GetUserById", new{userId = 3});

Autor: Chuck Conway ist ein KI-Ingenieur mit fast 30 Jahren Erfahrung in der Softwareentwicklung. Er entwickelt praktische KI-Systeme – Content-Pipelines, Infrastruktur-Agenten und Tools, die echte Probleme lösen – und teilt seine Erkenntnisse unterwegs. Verbinden Sie sich mit ihm in den sozialen Medien: X (@chuckconway) oder besuchen Sie ihn auf YouTube und auf SubStack.

↑ Nach oben

Das könnte dir auch gefallen