Skip to content

पोस्ट

Code First के साथ Stored Procedures को कॉल करना

16 अक्टूबर 2014 • 2 मिनट पढ़ना

Code First के साथ Stored Procedures को कॉल करना

Entity Framework 6 Code First की कमजोरियों में से एक डेटाबेस कंस्ट्रक्ट्स (views, stored procedures… आदि) को नेटिवली कॉल करने के लिए समर्थन की कमी है। जिन लोगों ने Entity Framework (EF) में Code-First के बारे में नहीं सुना है या उपयोग नहीं किया है, उनके लिए Code-First बस एक Fluent mapping API है। यह विचार है कि आप अपने सभी डेटाबेस मैपिंग्स को कोड (यानी C#) में बनाएं और फ्रेमवर्क फिर डेटाबेस स्कीमा में परिवर्तनों को बनाता है और ट्रैक करता है।

पारंपरिक Entity Framework में stored procedure को कॉल करने के लिए आप इसे अपनी EDMX फ़ाइल में मैप करते हैं। यह एक बहु-चरणीय प्रक्रिया है। एक बार प्रक्रिया पूरी हो जाने के बाद एक विधि बनाई जाती है, जो DataContext से जुड़ी होती है।

मैंने stored procedure को कॉल करना आसान बनाने की कोशिश की। एक stored procedure के मूल में आपके पास एक procedure name, N संख्या में parameters और एक results set होता है। मैंने एक छोटी extension method लिखी है जो एक procedure name, parameters और एक return type लेती है। यह बस काम करता है। procedure और इसके parameters को मैप करने की कोई आवश्यकता नहीं है।

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

उपयोग

var context = new DataContext();

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

लेखक: Chuck Conway एक AI इंजीनियर हैं जिनके पास सॉफ्टवेयर इंजीनियरिंग का लगभग 30 साल का अनुभव है। वह व्यावहारिक AI सिस्टम बनाते हैं—कंटेंट पाइपलाइन, इंफ्रास्ट्रक्चर एजेंट, और ऐसे टूल जो वास्तविक समस्याओं को हल करते हैं—और अपनी सीख को साझा करते हैं। सोशल मीडिया पर उनसे जुड़ें: X (@chuckconway) या YouTube और SubStack पर उनसे मिलें।

↑ शीर्ष पर वापस जाएं

आपको यह भी पसंद आ सकता है