পোস্ট
কোড ফার্স্ট দিয়ে স্টোরড প্রসিডিউর কল করা
১৬ অক্টোবর, ২০১৪ • 2 মিনিট পড়া

Entity Framework 6 Code First এর একটি দুর্বলতা হল ডাটাবেস কনস্ট্রাক্ট (ভিউ, স্টোরড প্রসিডিউর… ইত্যাদি) নেটিভভাবে কল করার সাপোর্টের অভাব। যারা Entity Framework (EF) এ Code-First সম্পর্কে শোনেননি বা ব্যবহার করেননি, তাদের জন্য বলি Code-First হল একটি Fluent ম্যাপিং API। এর ধারণা হল আপনার সমস্ত ডাটাবেস ম্যাপিং কোডে (যেমন C#) তৈরি করা এবং ফ্রেমওয়ার্ক তারপর ডাটাবেস স্কিমায় পরিবর্তনগুলি তৈরি এবং ট্র্যাক করে।
ঐতিহ্যগত Entity Framework এ একটি স্টোরড প্রসিডিউর কল করতে আপনি এটি আপনার EDMX ফাইলে ম্যাপ করতেন। এটি একটি বহু-ধাপের প্রক্রিয়া। প্রক্রিয়াটি সম্পন্ন হওয়ার পর একটি মেথড তৈরি হয়, যা DataContext
এর সাথে যুক্ত থাকে।
আমি স্টোরড প্রসিডিউর কল করাকে সহজ করার চেষ্টা করেছি। একটি স্টোরড প্রসিডিউরের মূলে আপনার একটি প্রসিডিউর নাম, N সংখ্যক প্যারামিটার এবং একটি রেজাল্ট সেট থাকে। আমি একটি ছোট এক্সটেনশন মেথড লিখেছি যা একটি প্রসিডিউর নাম, প্যারামিটার এবং একটি রিটার্ন টাইপ নেয়। এটি কেবল কাজ করে। প্রসিডিউর এবং এর প্যারামিটার ম্যাপ করার প্রয়োজন নেই।
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});
লেখক: চাক কনওয়ে সফটওয়্যার ইঞ্জিনিয়ারিং এবং জেনারেটিভ এআই-তে বিশেষজ্ঞ। তার সাথে সোশ্যাল মিডিয়ায় যোগাযোগ করুন: X (@chuckconway) অথবা তাকে YouTube-এ দেখুন।