मैं अपने बालों को लगभग 2 दिनों के लिए खींच रहा हूं, क्योंकि जब भी मैं कई-से जोड़ता हूं तो मैं परिवर्तनों को सहेजने के लिए ईएफ नहीं प्राप्त कर सकता एक मौजूदा इकाई के लिए कई इकाई।एंटिटी फ्रेमवर्क 6 में कई से अधिक नेविगेशन प्रॉपर्टी अपडेट करना, सहेजे नहीं जा रहे परिवर्तन
मेरे संरचना सादा सरल है:
मैं एक मेज
Person
कहा जाता है, यह एक आईडी (प्राथमिक, पहचान), और कुछ अन्य स्ट्रिंग क्षेत्रोंएक मेज के साथ
Keyword
कहा जाता है एक आईडी (प्राथमिक, पहचान) और एक स्ट्रिंग क्षेत्र,Value
और एक
PersonKeywordRelation
नामक एकPersonId
साथ, और एकKeywordId
क्षेत्र
जब मैं अपने संस्थाओं (डाटाबेस पहले), मैं एक वर्ग Person
, एक ICollection<Keyword>
साथ मिल जेनरेट किया है - सब अच्छा है, के रूप में उम्मीद काम करता है।
समस्या तब उत्पन्न होती है जब मैं मौजूदा Person
को कीवर्ड की संशोधित सूची सहेजने का प्रयास करता हूं। केवल स्केलर गुण (तार) सहेजे गए हैं, मेरे कीवर्ड नहीं!
- मैंने आलसी लोडिंग को अक्षम करने का प्रयास किया है, कोई प्रभाव नहीं।
- मैंने डेटाबेस से प्रत्येक अलग-अलग कीवर्ड को फिर से लोड करने का प्रयास किया, कोई प्रभाव नहीं।
- मैंने संदर्भ में सभी कीवर्ड लोड करने का प्रयास किया ताकि यह देखने के लिए कि क्या ईएफ परिवर्तनों का पता लगाने में मदद करेगा, ऐसा नहीं हुआ।
मुझे पूरा यकीन है कि मैं अकेला नहीं हूं जिसने यह समस्या है, (वास्तव में मुझे पूरी तरह से यकीन है क्योंकि मैंने पहले से ही एक ही विषय पर कुछ प्रश्न देखे हैं, फिर भी मैं असमर्थ हूं एक कामकाजी उत्तर खोजने के लिए ...), ज्यादातर ईएफ के पुराने संस्करणों के लिए, जो एक और अच्छा कारण है कि मैंने अभी तक एक और सवाल क्यों शुरू किया: क्या इस मुद्दे को हल करने में कुछ भी नहीं बदला है?
यहां मेरा कोड है जो व्यक्तियों के अद्यतन (और निर्माण) करता है। आप ईएफ को तदनुसार परिवर्तनों को सहेजने पर अपना प्रयास देखेंगे।
public void SavePersons(IList<Person> persons)
{
// Create a EF Context
using (var ctx = new MyDbEntities())
{
foreach (var person in persons)
{
// Attach
ctx.Persons.Attach(person);
// Insert or update?
ctx.Entry(person).State = person.Id == 0 ? EntityState.Added : EntityState.Modified;
// Get current keywords before clearing from entity
var keywords = new List<Keyword>(person.Keywords);
// Clear keywords from entity, so we can add fresh ones, hopefully
// EF will have an easier time handling this..
person.Keywords.Clear();
// Add keywords
keywords.ForEach(kw =>
{
ctx.Keywords.Attach(kw);
ctx.Entry(kw).State = EntityState.Modified;
person.Keywords.Add(kw);
});
}
// Save
ctx.SaveChanges();
}
}
क्या आपके कीवर्ड के मूल्य बदल रहे हैं या व्यक्ति और कीवर्ड के बीच संबंध बदल रहे हैं या दोनों? –
केवल रिश्ते - हालांकि दोनों को समर्थित होना चाहिए, अधिमानतः। – Jeff