asp.net - EF inherited object insert failed because of mapping -


मैंने एक EDMX फ़ाइल के साथ एक सरल समाधान बनाया है जिसमें एक तालिका खेल 2 फ़ील्ड के साथ IdSport और लेबल । मैंने किसी चीज़ खेल वस्तु एफई द्वारा बनाई गई की विरासत में मिला के साथ डीबी में एक रिकॉर्ड सम्मिलित करना चाहते हैं।

 <कोड> सार्वजनिक क्लास सूचकांक विरासत में मिली System.Web.UI.Page संरक्षित उप Page_Load (ByVal इस वस्तु के रूप में, ByVal ई System.EventArgs के रूप में) Me.Load मंद aSport न्यू TestSport () का उपयोग ctx न्यू FormationEntities ctx.AddObject के रूप में ( "खेल", aSport) ctx.SaveChanges () अंत के रूप में संभालती है End Sub का उपयोग करना एंड क्लास पब्लिक क्लास टेस्टपोर्ट इनरिट्स स्पोर्ट एंड क्लास  

एक खेल ऑब्जेक्ट के साथ यह काम करता है लेकिन TestSport के साथ नहीं। मैं कुछ गुण और दूसरों functionnalities जोड़ने के लिए विरासत में मिला वर्ग की जरूरत है, लेकिन जब मैं इसे सहेजें, मैं सिर्फ संपत्ति पैरेंट ऑब्जेक्ट खेल के पास को बचाने के लिए करना चाहते हैं।

त्रुटि संदेश :

मानचित्रण और मेटाडाटा जानकारी EntityType के लिए नहीं पाया जा सका

मुझे पता है कि हमेशा की तरह आंशिक वर्ग का उपयोग करने के लिए है, लेकिन मेरी परियोजना पर, < मजबूत> EDMX फ़ाइल किसी अन्य प्रोजेक्ट में है, इसलिए केवल एक ही उपाय है जो मुझे एक विरासत कक्षा में उपयोग करना है।

मैं क्या कर रहा हूँ गलत? मेरी समस्या कैसे ठीक करें? यह यह करने के लिए एक बेहतर तरीका मौजूद है?

धन्यवाद।

इकाई की रूपरेखा आपकी संस्थाओं की बचत के दौरान एक प्रकार का प्रतिबिंब का उपयोग करने के लिए प्रतीत होता है, और संभवत: क्यों आपके उत्तराधिकारी काम नहीं करते हैं एक तरह से आप अभी भी अपने enties (केवल फ़ंक्शन यद्यपि) के लिए कार्यक्षमता जोड़ सकते हैं विस्तार विधियों का उपयोग कर रहा है:

लेकिन अगर यह केवल कुछ फ़ंक्शंस से अधिक है जो आपको जोड़ने की आवश्यकता है, तो अधिक संरचनात्मक समाधान पर विचार करें। डेटा परत में अपने ऑब्जेक्ट का हिस्सा लेना और ऊपरी परत में उसी ऑब्जेक्ट का हिस्सा जिम्मेदारियों का एक अच्छा अलगाव नहीं है। आपके डेटा प्रोजेक्ट (मैं मानता हूँ) में वर्ग का हिस्सा होने के बजाय, और इसके कुछ भाग एक अन्य परियोजना में, अपनी परियोजना में एक 'लॉजिकिक्स क्लास' बनाने पर विचार करें जो आपकी इकाई के आसपास लपेटता है और जिस तरह से कार्यक्षमता जोड़ता है उदाहरण के लिए आप सीधे इकाई को उजागर करके ऐसा कर सकते हैं:

  सार्वजनिक वर्ग स्पोर्ट लैगिक {निजी स्पोर्ट _ एसपोर्ट; सार्वजनिक खेल खेल {get {return_sport; }} सार्वजनिक स्ट्रिंग SomeNewProperty {get; सेट; } सार्वजनिक शून्य DoStuff () {}; }  

या जिस तरह से मैं तर्कसंगत वस्तु इकाई के चारों ओर एक वास्तविक तार्किक आवरण के रूप में कार्य कर रहा हूं वहां का उपयोग करता हूं। यह क्लीनर है, क्योंकि यह इकाई पूरी तरह से obfuscates:। किसी भी बुला कोड आपके इकाई के ज्ञान की जरूरत नहीं wil (खेल) वस्तु

  सार्वजनिक वर्ग SportLogic {निजी स्पोर्ट _sport; सार्वजनिक स्ट्रिंग स्पोर्ट-प्रॉपर्टी {get {return_sport.SportProperty; } सेट {_sport.SportProperty = value; }} सार्वजनिक स्ट्रिंग SomeNewProperty {get; सेट; } सार्वजनिक शून्य DoStuff () {}; }  

Comments