इकाई ढांचा - DbContext
एंटिटी फ्रेमवर्क आपको कॉमन लैंग्वेज रनटाइम (CLR) ऑब्जेक्ट्स के लिए डेटा को क्वेरी, इंसर्ट, अपडेट और डिलीट करने में सक्षम बनाता है, जो कि एंटिटीज के लिए जाना जाता है। एंटिटी फ्रेमवर्क उन संस्थाओं और रिश्तों को दर्शाता है जो आपके मॉडल में एक डेटाबेस में परिभाषित हैं। यह भी सुविधाएं प्रदान करता है -
- डेटाबेस ऑब्जेक्ट से ऑब्जेक्ट के रूप में लौटाया गया डेटााइज़ करें
- वस्तुओं में किए गए परिवर्तनों को ट्रैक करें
- संभालना संगति
- प्रोपेगेट ऑब्जेक्ट डेटाबेस में वापस बदल जाता है
- वस्तुओं को नियंत्रित करने के लिए बांधें
प्राथमिक वर्ग जो वस्तुओं के रूप में डेटा के साथ बातचीत के लिए जिम्मेदार है, System.Data.Entity.DbContext है। DbContext API .NET फ्रेमवर्क के भाग के रूप में जारी नहीं किया गया है। कोड फ़र्स्ट और DbContext API में नई सुविधाओं को जारी करने के साथ अधिक लचीला और लगातार होने के लिए, Entity Framework टीम Microsoft के NuGet वितरण सुविधा के माध्यम से EntityFramework.dll वितरित करती है।
NuGet आपको वेब से सीधे अपने प्रोजेक्ट में प्रासंगिक DLL खींचकर अपने .NET प्रोजेक्ट्स के संदर्भ जोड़ने की अनुमति देता है।
लाइब्रेरी पैकेज मैनेजर नामक एक विजुअल स्टूडियो एक्सटेंशन वेब से उपयुक्त असेंबली को अपनी परियोजनाओं में खींचने का एक आसान तरीका प्रदान करता है।
DbContext API को एंटिटी फ्रेमवर्क के साथ अपनी बातचीत को सरल बनाने के लिए लक्षित किया जाता है।
यह उन तरीकों और गुणों की संख्या को भी कम कर देता है जिन्हें आपको आमतौर पर उपयोग किए जाने वाले कार्यों तक पहुंचने की आवश्यकता होती है।
एंटिटी फ्रेमवर्क के पिछले संस्करणों में, ये कार्य अक्सर खोज और कोड के लिए जटिल थे।
संदर्भ वर्ग रन टाइम के दौरान इकाई ऑब्जेक्ट्स का प्रबंधन करता है, जिसमें डेटाबेस से डेटा के साथ ऑब्जेक्ट्स को पॉप्युलेट करना, ट्रैकिंग बदलना और डेटाबेस को डेटा को बनाए रखना शामिल है।
एक DbContext व्युत्पन्न वर्ग को परिभाषित करना
संदर्भ के साथ काम करने का अनुशंसित तरीका एक वर्ग को परिभाषित करना है जो DbContext से निकलता है और DbSet गुणों को उजागर करता है जो संदर्भ में निर्दिष्ट संस्थाओं के संग्रह का प्रतिनिधित्व करता है। यदि आप EF डिज़ाइनर के साथ काम कर रहे हैं, तो आपके लिए संदर्भ उत्पन्न हो जाएगा। यदि आप पहले कोड के साथ काम कर रहे हैं, तो आप आमतौर पर संदर्भ स्वयं लिखेंगे।
निम्नलिखित कोड एक सरल उदाहरण है जो दिखाता है कि UniContext DbContext से लिया गया है।
आप DbSet के साथ स्वचालित गुण का उपयोग कर सकते हैं जैसे गेटटर और सेटर।
यह बहुत क्लीनर कोड भी बनाता है, लेकिन जब आपको कोई अन्य तर्क लागू करने का कोई तर्क नहीं है, तो DbSet बनाने के उद्देश्य से इसका उपयोग करने की आवश्यकता नहीं है।
public class UniContext : DbContext {
public UniContext() : base("UniContext") { }
public DbSet<Student> Students { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Course> Courses { get; set; }
}
पहले, ईडीएम उन संदर्भ वर्गों को उत्पन्न करता था जो ऑब्जेक्टकोटेक्स्ट क्लास से प्राप्त होते थे।
ObjectContext के साथ काम करना थोड़ा जटिल था।
DbContext, ObjectContext के चारों ओर एक आवरण है, जो वास्तव में ObjectContext के समान है और सभी विकास मॉडल जैसे Code First, Model First और Database First में उपयोगी और आसान है।
प्रश्नों
आपके द्वारा उपयोग किए जा सकने वाले तीन प्रकार के प्रश्न हैं -
- एक नई इकाई जोड़ना।
- किसी मौजूदा इकाई के संपत्ति मूल्यों को बदलना या अपडेट करना।
- मौजूदा इकाई को हटाना।
नई संस्थाओं को जोड़ना
एंटिटी फ्रेमवर्क के साथ एक नई वस्तु जोड़ना अपनी वस्तु के एक नए उदाहरण का निर्माण करने और इसे DSSet पर ऐड पद्धति का उपयोग करके पंजीकृत करने के रूप में सरल है। निम्न कोड तब होता है जब आप डेटाबेस में एक नया छात्र जोड़ना चाहते हैं।
private static void AddStudent() {
using (var context = new UniContext()) {
var student = new Student {
LastName = "Khan",
FirstMidName = "Ali",
EnrollmentDate = DateTime.Parse("2005-09-01")
};
context.Students.Add(student);
context.SaveChanges();
}
}
मौजूदा संस्थाओं को बदलना
मौजूदा ऑब्जेक्ट्स को बदलना उतना ही सरल है जितना कि आपके द्वारा दी गई संपत्ति (एस) को दिए गए मूल्य को अपडेट करना और SaveChanges को कॉल करना आसान है। निम्नलिखित कोड में, अली का अंतिम नाम खान से असलम में बदल दिया गया है।
private static void AddStudent() {
private static void ChangeStudent() {
using (var context = new UniContext()) {
var student = (from d in context.Students
where d.FirstMidName == "Ali" select d).Single();
student.LastName = "Aslam";
context.SaveChanges();
}
}
}
मौजूदा संस्थाओं को हटाना
एंटिटी फ्रेमवर्क का उपयोग करके एक इकाई को हटाने के लिए, आप DbSet पर निकालें विधि का उपयोग करें। मौजूदा और नए जोड़े गए दोनों संस्थाओं के लिए काम निकालें। निकाले गए निकाय पर कॉल करना जो जोड़ा गया है, लेकिन डेटाबेस में अभी तक सहेजा नहीं गया है, इकाई को जोड़ना रद्द कर देगा। इकाई को परिवर्तन ट्रैकर से हटा दिया जाता है और अब DbContext द्वारा ट्रैक नहीं किया जाता है। परिवर्तन को ट्रैक करने वाली मौजूदा इकाई पर निकालें को कॉल करने से अगली बार SaveChanges नामक विलोपन के लिए इकाई पंजीकृत हो जाएगी। निम्न उदाहरण एक उदाहरण दिखाता है जहां छात्र डेटाबेस से हटा दिया जाता है जिसका पहला नाम अली है।
private static void DeleteStudent() {
using (var context = new UniContext()) {
var bay = (from d in context.Students where d.FirstMidName == "Ali" select d).Single();
context.Students.Remove(bay);
context.SaveChanges();
}
}