Skip to content

Innlegg

Kaller lagrede prosedyrer med Code First

16. oktober 2014 • 2 min lesing

Kaller lagrede prosedyrer med Code First

En av svakhetene ved Entity Framework 6 Code First er mangelen på støtte for å kalle databasekonstruksjoner (visninger, lagrede prosedyrer… osv) på en innebygd måte. For de som ikke har hørt om eller brukt Code-First i Entity Framework (EF), er Code-First ganske enkelt en Fluent mapping API. Ideen er å opprette alle databasetilordningene dine i kode (dvs. C#) og rammeverket oppretter og sporer deretter endringene i databaseskjemaet.

I tradisjonell Entity Framework ville du tilordne en lagret prosedyre i EDMX-filen din. Dette er en prosess med flere trinn. Når prosessen er fullført, opprettes en metode som henger av DataContext.

Jeg søkte etter å gjøre det enklere å kalle lagrede prosedyrer. I hjertet av en lagret prosedyre har du et prosedyrenavn, N antall parametere og et resultatset. Jeg har skrevet en liten utvidelsesmetode som tar et prosedyrenavn, parametere og en returtype. Det fungerer bare. Ingen tilordning av prosedyren og dens parametere.

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();
}

Bruk

var context = new DataContext();

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

Forfatter: Chuck Conway er en AI-ingeniør med nesten 30 års erfaring innen programvareutvikling. Han bygger praktiske AI-systemer—innholdspipelines, infrastrukturagenter og verktøy som løser virkelige problemer—og deler det han lærer underveis. Koble til ham på sosiale medier: X (@chuckconway) eller besøk ham på YouTube og på SubStack.

↑ Tilbake til toppen

Du kan også like