दिलचस्प पोस्ट
कैसे एक तत्व प्रकार jquery का उपयोग करने के लिए बदलने के लिए क्या मटप्ललिब भूखंडों को अलग करने का एक तरीका है ताकि गणना जारी रख सकें? कई डेटा.फ्रेम को एक डेटा.फ्रेम में एक लूप के साथ मिलाएं एंड्रॉइड नेटली इनकमिंग कॉल स्क्रीन की तरह सच कॉलर एंड्रॉइड ऐप की तरह विंडो पॉप अप करें Ctypes के साथ सी ++ क्लासेस का उपयोग कैसे करें? जेक्यूग्रीड प्रोग्रामैटिकली ग्रिड पंक्ति चुनें क्या मैं एक सेवा के रूप में चल रहा हूं? jQuery के मोडल संवाद और jqGrid मेरे एंड्रॉइड ऐप में टेक्स्टव्यू लिंक को संभाल लें .NET अनुप्रयोग के लिए उपयोगकर्ता सेटिंग्स को स्टोर करने का सबसे अच्छा तरीका क्या है? टुकड़ा पहले ही जोड़ा गया IllegalStateException एनजी-बाइंड-एचटीएमएल कम्पाइल ऐन्जलरज कोड कैसे करें सुरक्षा को संभालने का सबसे अच्छा तरीका और उपयोगकर्ता द्वारा प्रवेश किए गए यूआरएल के साथ एक्सएसएस से बचें मैं संदर्भ के एक सदिश क्यों नहीं बना सकता? जावा में "ClassCastException" का स्पष्टीकरण

कई इकाई फ़्रेमवर्क में कई को डालें / अपडेट करें मैं यह कैसे करुं?

मैं इसे EF4 और नए का उपयोग कर रहा हूँ मेरे पास मेरे प्रोजेक्ट में बहुत से लोग हैं और ऐसा प्रतीत नहीं होता कि कैसे सम्मिलित या अपडेट करना है। मैंने एक छोटी सी परियोजना का निर्माण किया है, यह देखने के लिए कि उसे कैसे कोडित किया जाना चाहिए।

मान लीजिए मेरे पास 3 टेबल हैं

  1. कक्षा: क्लास आईआईडी-क्लासनाम
  2. विद्यार्थी: छात्रआईडी-फर्स्ट-नाम-उपनाम
  3. छात्र वर्ग: विद्यार्थीआईडी-क्लासआईडी

मॉडल के माध्यम से सभी रिश्तों को जोड़ने और मॉडल को अपडेट करने के बाद मैंने देखा है कि छात्र वर्ग दिखाई नहीं देता, यह डिफ़ॉल्ट व्यवहार लगता है

अब मुझे एक डालें और अद्यतन करने की आवश्यकता है आप इसे कैसे करते हो? कोई भी कोड नमूने या लिंक जहां मैं एक उदाहरण डाउनलोड कर सकता हूं, या क्या आप 5 मिनट निकाल सकते हैं?

वेब के समाधान से एकत्रित समाधान "कई इकाई फ़्रेमवर्क में कई को डालें / अपडेट करें मैं यह कैसे करुं?"

संस्थाओं (या ऑब्जेक्ट्स) के संदर्भ में आपके पास Class ऑब्जेक्ट है जिसमें Students का एक संग्रह और एक Student ऑब्जेक्ट है जिसमें Classes संग्रह है। चूंकि आपके StudentClass तालिका में केवल आईडी है और कोई अतिरिक्त जानकारी नहीं है, ईएफ शामिल होने वाली तालिका के लिए एक इकाई उत्पन्न नहीं करता है। यही सही व्यवहार है और यही आपको उम्मीद है।

अब, आवेषण या अपडेट करते समय, ऑब्जेक्ट के संदर्भ में सोचने का प्रयास करें उदाहरण यदि आप दो छात्रों के साथ एक वर्ग सम्मिलित करना चाहते हैं, तो Class ऑब्जेक्ट बनाएं, Student ऑब्जेक्ट्स, छात्रों को Class जोड़ दें Students संग्रह Class ऑब्जेक्ट को संदर्भ में जोड़ें और SaveChanges करें:

 using (var context = new YourContext()) { var mathClass = new Class { Name = "Math" }; mathClass.Students.Add(new Student { Name = "Alice" }); mathClass.Students.Add(new Student { Name = "Bob" }); context.AddToClasses(mathClass); context.SaveChanges(); } 

इससे Class टेबल में एक प्रविष्टि, Student टेबल में दो प्रविष्टियां और Student Class तालिका में दो प्रविष्टियों को एक साथ जोड़कर बनाया जाएगा।

आप मूल रूप से अपडेट के लिए ऐसा करते हैं। बस डेटा प्राप्त करें, संग्रह से ऑब्जेक्ट को जोड़कर और निकालने से ग्राफ़ को संशोधित करें, SaveChanges कॉल करें। विवरण के लिए इस तरह के समान प्रश्न की जांच करें ।

संपादित करें :

आपकी टिप्पणी के अनुसार, आपको एक नया Class डालने और दो मौजूदा Students को इसमें शामिल करने की आवश्यकता है:

 using (var context = new YourContext()) { var mathClass= new Class { Name = "Math" }; Student student1 = context.Students.FirstOrDefault(s => s.Name == "Alice"); Student student2 = context.Students.FirstOrDefault(s => s.Name == "Bob"); mathClass.Students.Add(student1); mathClass.Students.Add(student2); context.AddToClasses(mathClass); context.SaveChanges(); } 

चूंकि दोनों छात्र पहले से ही डेटाबेस में हैं, वे सम्मिलित नहीं होंगे, लेकिन जब से वे Class के Students संग्रह में हैं, तो Students प्रविष्टि तालिका में दो प्रविष्टियां डाली StudentClass

अपडेट करने के लिए इसे एक प्रयास करें:

 [HttpPost] public ActionResult Edit(Models.MathClass mathClassModel) { //get current entry from db (db is context) var item = db.Entry<Models.MathClass>(mathClassModel); //change item state to modified item.State = System.Data.Entity.EntityState.Modified; //load existing items for ManyToMany collection item.Collection(i => i.Students).Load(); //clear Student items mathClassModel.Students.Clear(); //add Toner items foreach (var studentId in mathClassModel.SelectedStudents) { var student = db.Student.Find(int.Parse(studentId)); mathClassModel.Students.Add(student); } if (ModelState.IsValid) { db.SaveChanges(); return RedirectToAction("Index"); } return View(mathClassModel); } 

मैं उस पर अपना अनुभव जोड़ना चाहता था। वास्तव में ईएफ, जब आप किसी ऑब्जेक्ट को संदर्भ में जोड़ते हैं तो यह सभी बच्चों और संबंधित संस्थाओं की स्थिति को जोड़ती है। यद्यपि यहां नियम में एक छोटा अपवाद है: अगर बच्चों / संबंधित संस्थाओं को इसी संदर्भ से ट्रैक किया जा रहा है, तो ईएफ समझता है कि ये संस्थाएं मौजूद हैं और उन्हें जोड़ नहीं पाती हैं। उदाहरण तब होता है जब आप बच्चों / संबंधित संस्थाओं को किसी अन्य संदर्भ या वेब यूआई आदि से लोड करते हैं और फिर हाँ, ईएफ इन संस्थाओं के बारे में कुछ नहीं जानता और चला जाता है और उन सभी को जोड़ता है। इससे बचने के लिए, संस्थाओं की चाबियाँ प्राप्त करें और उनको ढूंढें (जैसे context.Students.FirstOrDefault(s => s.Name == "Alice")) उसी संदर्भ में जिसमें आप इसके अतिरिक्त करना चाहते हैं।

इकाई ढांचा में, जब वस्तु को संदर्भ में जोड़ा जाता है, तो उसके राज्य में जोड़े जाने पर परिवर्तन होता है। ईएफ ऑब्जेक्ट ट्री में जोड़ा जाने वाले प्रत्येक ऑब्जेक्ट की स्थिति को भी बदलता है और इसलिए आपको प्राथमिक कुंजी उल्लंघन त्रुटि मिल रही है या डुप्लिकेट रिकॉर्ड तालिका में जोड़ दिए गए हैं।

मैं कई-से-कई रिश्ते को संभालने के लिए निम्नलिखित तरीके का उपयोग करता हूं जहां केवल विदेशी कुंजी शामिल हैं I

तो डालने के लिए :

 public void InsertStudentClass (long studentId, long classId) { using (var context = new DatabaseContext()) { Student student = new Student { StudentID = studentId }; context.Students.Add(student); context.Students.Attach(student); Class class = new Class { ClassID = classId }; context.Classes.Add(class); context.Classes.Attach(class); student.Classes = new List<Class>(); student.Classes.Add(class); context.SaveChanges(); } } 

हटाने के लिए ,

 public void DeleteStudentClass(long studentId, long classId) { Student student = context.Students.Include(x => x.Classes).Single(x => x.StudentID == studentId); using (var context = new DatabaseContext()) { context.Students.Attach(student); Class classToDelete = student.Classes.Find(x => x.ClassID == classId); if (classToDelete != null) { student.Classes.Remove(classToDelete); context.SaveChanges(); } } }