Skip to content

Innlegg

Kalle Lagrede Prosedyrer med Code First

16. oktober 2014 • 2 min lesing

Kalle Lagrede Prosedyrer med Code First

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

I tradisjonell Entity Framework for å kalle en lagret prosedyre ville du mappet den i EDMX-filen din. Dette er en flertrinns prosess. Når prosessen er fullført, opprettes en metode som henger av DataContext.

Jeg søkte å gjøre det enklere å kalle lagrede prosedyrer. I hjertet av en lagret prosedyre har du et prosedyrenavn, N antall parametere og et resultatsett. Jeg har skrevet en liten utvidelsesmetode som tar et prosedyrenavn, parametere og en returtype. Den bare fungerer. Ingen mapping 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 spesialiserer seg på programvareutvikling og Generativ AI. Koble til ham på sosiale medier: X (@chuckconway) eller besøk ham på YouTube.

↑ Tilbake til toppen

Du liker kanskje også