c# - modifying List of complex types EF6 MVC5 -
यह मानते हुए कि मेरे पास निम्न है:
सार्वजनिक वर्ग कर्मचारी {सार्वजनिक इंट एम्प्लियरआईडी {get; सेट; } सार्वजनिक स्ट्रिंग प्रथम नाम {प्राप्त; सेट; } सार्वजनिक आभासी सूची & lt; LastName & gt; LastName {प्राप्त करें; सेट; }} सार्वजनिक वर्ग LastName {सार्वजनिक int LastNameID {get; सेट; } सार्वजनिक नया स्ट्रिंग Value1 {get; सेट; }} और मेरे पास एक सूचकांक पृष्ठ है, जहां मॉडल निम्न के साथ कर्मचारियों की एक सूची है:
@ फोरेच (मॉडल में विविध आइटम) { // पृष्ठ संपादित करने के लिए लिंक जहां मैं सूची में अंतिम नाम को संशोधित कर सकता हूं @ एचटीएमएल.एक्शनलिंक (मद.लिस्टएन [कुछ इंडैक्स], "एडिट", नया {आईडी = आइटम.एम्प्लीएआईडी}) < P> और नियंत्रक में मेरे पास सार्वजनिक कार्यप्रणाली संपादित करें (int? Id) {if (id == null) {new HttpStatusCodeResult (HttpStatusCode.BadRequest); } कर्मचारी कर्मचारी = db.Employees.Find (आईडी); अगर (कर्मचारी == शून्य) {वापसी HttpNotFound (); } वापसी देखें (कर्मचारी); } [एचटीटीपीफ़ोस्ट] [मान्य एंटिफॉर्गरीटीन] पब्लिक एक्शन रिजल्ट एडिशन (कर्मचारी कर्मचारी) {if (मॉडलस्टेट। आईएसआई वालिद) {// अपवाद यहाँ - डीबी.इंटर (कर्मचारी) .सेट = एंटिटीस्टेट.निर्धारित; db.SaveChanges (); वापसी पुनर्निर्देशित करेंएक्शन ("इंडेक्स"); } वापसी देखें (कर्मचारी); } और इस तरह से एक संपादन दृश्य
@ मॉडेल परीक्षण 123.मोल्स। कर्मचारी @ {ViewBag.Title = "LastName"; } & Lt; h2 & gt; अंतिम नाम & lt; / h2 & gt; @using (Html.BeginForm ()) {@ Html.AntiForgeryToken () @ Html.ValidationSummary (सच है, नया, {@ वर्ग = "टेक्स्ट-खतरे"}) @ (के लिए I int = 0; i & lt; मॉडल .नामनाम; i ++) {@ Html.TextBoxFor (m = & gt; m.LastName [i] .Value1) // यहां छिपाई गई जानकारी **** नया अपवाद फेंकना, नीचे देखें @ एचटीएमएल। HiddenFor (m = & gt; m.ListName [i] .LastNameID) & lt; div वर्ग = "फॉर्म-समूह" & gt; & Lt; div वर्ग = "col-md-offset-2 col-md-10" & gt; & Lt; इनपुट प्रकार = "सबमिट करें" मान = "सहेजें" वर्ग = "बीटीएन बीटीएन-डीफॉल्ट" / & gt; & Lt; / div & gt; & Lt; / div & gt; } जब मैं इस संपादन प्रपत्र को जमा करता हूं, तो मुझे एक अपवाद देता है:
'Testing123.Models.LastName' प्रकार की एक इकाई को संलग्न करना असफल रहा क्योंकि अन्य इकाई एक ही प्रकार पहले से ही प्राथमिक कुंजी मान है यह तब हो सकता है जब 'अटैच' पद्धति का उपयोग कर या किसी इकाई की स्थिति को 'अपरिवर्तित' या 'संशोधित' करने के लिए सेट कर दिया जाए, तो ग्राफ़ में मौजूद किसी भी इकाई में परस्पर विरोधी मूल्य मौजूद हैं। ऐसा इसलिए हो सकता है क्योंकि कुछ संस्थाएं नए हैं और अभी तक डेटाबेस से जनरेट किए गए कुंजी मान प्राप्त नहीं हुए हैं। इस मामले में ग्राफ़ को ट्रैक करने के लिए 'ऐड' विधि या 'एडेड' इकाई राज्य का उपयोग करें और फिर गैर-नई संस्थाओं की स्थिति को 'अपरिवर्तित' या 'संशोधित' के रूप में उचित के रूप में सेट करें
क्या यह LastName जटिल प्रकार ऑब्जेक्ट की सूची को संशोधित करने का सही तरीका है? जिसका अर्थ है, यदि पहले से 4 अंतिम नाम हैं, और मैं इस दृश्य को टेक्स्ट बॉक्स के साथ दर्ज करता हूं, और प्रत्येक अंतिम नाम को एक पाठ बॉक्स में प्रदर्शित किया जाता है, और मैं टेक्स्ट बॉक्स में मान बदलता हूँ, तो यह फॉर्म के अंतिम नामों को अद्यतन करेगा ?
संपादित छुपाए गए सहायक को जोड़ने के बाद, मुझे अब db.saveChanges पर निम्नलिखित अपवाद मिल रहा है
स्टोर अद्यतन, डालें, या हटाएं कथन की एक अप्रत्याशित संख्या (0) से प्रभावित है। संस्थाओं को लोड किए जाने के बाद से संस्थाओं को संशोधित या हटा दिया गया हो सकता है। ऑब्जेक्टटाइनेट प्रबंधक प्रविष्टियों को ताज़ा करें।
यह देखने के लिए उपयोगी होगा कि अपवाद कहाँ से आ रहा है (यानी स्टैक ट्रेस) , लेकिन उस के अभाव में कुछ चीजें हैं जो मैं इंगित कर सकता हूं।
- क्रियान्वयन में आप जांचते हैं कि यदि
कर्मचारी आपके पास पहले से ही है LastName संपत्ति पाने के लिए इसका इस्तेमाल किया जाता है। - संपादित करें दृश्य (या संपादन से पहले नहीं) टेक्स्ट बॉक्स को जोड़ने के लिए कोई भी तंत्र प्रदान करता है जो इसे वापस मॉडल में उत्पन्न करता है । आपको
Html.TextBox के बजाय का उपयोग करना चाहिए। इसके अलावा आपको एक Html.HiddenFor (m = & gt; m.ListName [i] .LastNameId) में LastNameId संदर्भित होने की आवश्यकता है (लूप के अंदर, जाहिर है) और कर्मचारी आईडी और प्रथम नाम में Html.HiddenFor प्रविष्टियां (पाश के बाहर) ताकि कर्मचारी उसे सभी गुणों को वापस पोस्ट कर देता है और इसके -
अंतिम नाम (प्रकार) एक जटिल प्रकार नहीं है क्योंकि इसमें [ComplexType] विशेषता है और इसमें एक ऐसा कॉलम है जो तालिका के प्राथमिक कुंजी के रूप में अनुमान लगाया जाएगा। जटिल प्रकार और सामान्य ईएफ संस्थाओं के बीच यह अंतर शायद प्रश्न का उत्तर देने के लिए महत्वपूर्ण नहीं है, हालांकि। अधिक जानकारी के लिए देखें।
Comments
Post a Comment