entity framework - Foreign Key Field will not update upon Db.savechanges() -


मेरे पास एक घटना मॉडल है:

  सार्वजनिक वर्ग की घटना {सार्वजनिक इन्ट आईडी}; सेट; } सार्वजनिक स्ट्रिंग विवरण {get; सेट; } सार्वजनिक वर्चुअल प्राधान्य प्राथमिकता {प्राप्त; सेट; } सार्वजनिक तिथि समय? हल [प्राप्त करें] सेट; }}  

और प्राथमिकता मॉडल:

  सार्वजनिक वर्ग की प्राथमिकता {सार्वजनिक इन्ट आईडी}; सेट; } सार्वजनिक स्ट्रिंग विवरण {get; सेट; }}  

जो एक विदेशी कुंजी रिश्ते को साझा करते हैं। प्राथमिकता तालिका में पी 0 से पी 9 तक 10 प्राथमिकताएं हैं।

इस दृश्य में संपादन के बाद एचटीटीपी पोस्ट है।

  [एचटीटीपी पोस्ट] सार्वजनिक एक्शन रिजल्ट संपादित करें (घटना घटना) {if (ModelState.IsValid) {if (incident.Id == 0) db.Incidents.Add (घटना); अन्य (डीबी। इंकाइंडर्स। अटैच (घटना); Db.Entry (घटना) .सेट = EntityState.Modified; } Db.SaveChanges (); वापसी पुनर्निर्देशित करेंएक्शन ("इंडेक्स"); } वापसी देखें (घटना); }  

डीबगिंग करते समय मैं घटना के अंदर सब कुछ अपडेट देख सकता हूं। सेव चेंज () (जिसके पास विदेशी कुंजी रिश्ते हैं) के बाद परिवर्तन प्राथमिकता के लिए परिलक्षित नहीं होता है यह क्यों है?

यदि आपके पास एक अतिरिक्त विदेशी कुंजी संपत्ति सार्वजनिक int प्राथमिकता आईडी प्राप्त हो तो आपकी प्रक्रिया काम करेगी; सेट; } में घटना मॉडल (या int? का उपयोग करें यदि incident.Priority वैकल्पिक है)। आप तब incident.Priority.Id के बजाय incident.proryityId को अपने दृश्य (एक कॉम्बोबॉक्स?) में बाँध लेंगे।

अगर आप नहीं चाहते हैं एक विदेशी कुंजी संपत्ति और अपने मॉडल के साथ छड़ी के रूप में संपादित करें कार्रवाई थोड़ा और अधिक जटिल हो जाएगा, तो ऐसा है:

  [एचटीटीपी पोस्ट] सार्वजनिक कार्यप्रणाली संपादित करें (घटना घटना) {if (ModelState.IsValid ) {Db.Priorities.Attach (incident.Priority); अगर (घटना.आईडी == 0) डीबी.अंतरिक। जोड़ें (घटना); Else {var incidentInDb = db.Incidents.Include (i = & gt; i.Priority) .SingleOrDefault (i = & gt; i.Id == घटना.आईडी); अगर (incidentInDb! = नल) {db.Entry (incidentInDb) .CurrentValues.SetValues ​​(घटना); घटनाInDb.Priority = घटना। प्राथमिकता; }} Db.SaveChanges (); वापसी पुनर्निर्देशित करेंएक्शन ("इंडेक्स"); } वापसी देखें (घटना); }  

सामान्यतः एक इकाई पर संशोधित राज्य स्थापित करने से संबंधों के लिए इस स्थिति को सेट नहीं किया जाएगा (जब तक आपके पास अपने मॉडल में एक विदेशी कुंजी संपत्ति नहीं है, पहले पैराग्राफ देखें )। यही कारण है कि आपका मूल कोड काम नहीं करता है और अतिरिक्त लाइन incidentInDb.Priority = incident.Priority आवश्यक है परिवर्तन ट्रैकिंग से पता चलेगा कि प्राथमिकता कब बदलती है और फिर डेटाबेस में विदेशी कुंजी को अपडेट करती है।


Comments