पोस्ट
Code First के साथ Stored Procedures को कॉल करना
16 अक्टूबर 2014 • 2 मिनट पढ़ना

Entity Framework 6 Code First की एक कमजोरी डेटाबेस constructs (views, stored procedures… आदि) को natively कॉल करने के लिए समर्थन की कमी है। जिन लोगों ने Entity Framework (EF) में Code-First के बारे में नहीं सुना है या इसका उपयोग नहीं किया है, Code-First केवल एक Fluent mapping API है। इसका विचार यह है कि आप अपनी सभी डेटाबेस mappings को code (यानी C#) में बनाएं और फिर framework डेटाबेस schema में changes को create और track करता है।
पारंपरिक Entity Framework में stored procedure को कॉल करने के लिए आप इसे अपनी EDMX file में map करते हैं। यह एक multi-step process है। एक बार process पूरी होने पर एक method बनाया जाता है, जो DataContext
से जुड़ा होता है।
मैंने stored procedure को कॉल करना आसान बनाने की कोशिश की। एक stored procedure के मूल में आपके पास एक procedure name, N संख्या में parameters और एक results set होता है। मैंने एक छोटा extension method लिखा है जो procedure name, parameters और return type लेता है। यह बस काम करता है। Procedure और इसके parameters को map करने की कोई आवश्यकता नहीं।
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});
लेखक: चक कॉनवे सॉफ्टवेयर इंजीनियरिंग और जेनेरेटिव AI में विशेषज्ञता रखते हैं। उनसे सोशल मीडिया पर जुड़ें: X (@chuckconway) या उन्हें YouTube पर देखें।