दिलचस्प पोस्ट
मैं पाठ की रेखा को कैसे उजागर कर सकता हूं जो माउस के सबसे निकट है? एंड्रॉइड स्टूडियो एक से अधिक पुस्तकालय परियोजनाओं से सिंगल एएआर को कैसे पैकेज करना है? प्रश्न-चिह्न और बृहदान्त्र क्या होता है (?: टर्नरी ऑपरेटर) उद्देश्य-सी में क्या होता है? जांचें कि क्या पेज को फिर से लोड किया गया है या फिर जावास्क्रिप्ट में रीफ्रेश किया गया है अजैत में अनजाने में कच्चे इनपुट का मजाक अजगर उपकरण के लिए आईओएस फ्रेमवर्क बनाना और बिटोड सक्षम करने के साथ यूनिवर्सल कॉन्फ़िगरेशन और कमांड लाइन टर्मिनल से बीटोड को अक्षम करना मैं एंड्रॉइड टैब विजेट की पृष्ठभूमि कैसे बदलूं? X-FACEBOOK-PLATFORM को समर्थन देने वाला जावा एस्मैक लाइब्रेरी वाला एक्सएमपीपी श्रोता प्रतिस्थापन पारंपरिक (गैर मध्यस्थ) MVC पैटर्न का पालन करने के लिए प्लेसमेंट क्या NodeJS ऐप के लिए एक बेस यूआरएल सेट करना संभव है? Angular2 रूपों में इनपुट मुखौटा फ़ील्ड उद्देश्य-सी में विरासत और श्रेणियों के बीच अंतर क्या है मुझे स्टैक पर डेक का उपयोग क्यों करना चाहिए? WhatsApp छवि साझा आईओएस varargs और ओवरलोडिंग के साथ बग?

इकाई फ़्रेमवर्क कोड पहले। प्राथमिक कुंजी ढूंढें

मैं कैसे पता लगा सकता है कि क्लास की कौन-सी संपत्ति इकाई ढाँचा कोड प्रथम संस्था POCO की प्राथमिक कुंजी है?

कृपया ध्यान दें आईडी / वर्ग नाम के लिए स्ट्रिंग मिलान + "आईडी" एक खराब विकल्प है। एंटीटी फ़्रेमवर्क द्वारा उपयोग किए गए सम्मेलन को खोदने के लिए और मज़बूती से महत्वपूर्ण संपत्ति प्राप्त करने का कोई तरीका होना चाहिए

अग्रिम में धन्यवाद।

वेब के समाधान से एकत्रित समाधान "इकाई फ़्रेमवर्क कोड पहले। प्राथमिक कुंजी ढूंढें"

आप प्रमुख गुणों के नाम प्राप्त करने के लिए मैपिंग मेटाडेटा पूछ सकते हैं (और फिर एक हो सकता है):

ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext; ObjectSet<YourEntity> set = objectContext.CreateObjectSet<YourEntity>(); IEnumerable<string> keyNames = set.EntitySet.ElementType .KeyMembers .Select(k => k.Name); 

आपके पास कुंजी नाम होने के बाद आप उनके मूल्यों का उपयोग करने के लिए प्रतिबिंब का उपयोग कर सकते हैं।

जैसा कि आप देख सकते हैं कि ऑब्जेक्ट कोडेक्ट एन्कोडिंग एपिसोड पर पहुंच वापस आता है क्योंकि DbContext API केवल सरल परिदृश्यों के लिए है, जहां आप मैपिंग मेटाडेटा जैसे विवरणों से परेशान नहीं हैं।

यदि यह किसी को मदद करता है, तो मुझे पहले से यह जानने के बिना ऐसा करने में सक्षम होना चाहिए (इसलिए मैं आसानी से CreateObjectSet<YourEntity>() नहीं कर सकता क्योंकि मुझे आपकी YourEntity नहीं पता था), इसलिए मैं @ लादिस्लाव के समाधान निम्नलिखित में हैं:

 // variable "type" is a System.Type passed in as a method parameter ObjectContext objectContext = ((IObjectContextAdapter)this.context).ObjectContext; IEnumerable<string> retval = (IEnumerable<string>)objectContext.MetadataWorkspace .GetType(type.Name, type.Namespace, System.Data.Entity.Core.Metadata.Edm.DataSpace.CSpace) .MetadataProperties .Where(mp => mp.Name == "KeyMembers") .First() .Value; 

ऐसा अजीब तरह लगता है कि MetadataWorkspace.GetType वर्क्सस्पेस। गेटटाइप के लिए नाम और नाम स्थान की स्ट्रिंग्स की आवश्यकता होती है, बजाय System.Type, लेकिन यह सबसे अच्छा है जो मुझे मिल सकता है।

ईएफ 6.1 में एक Db() विस्तार पद्धति है जो यह आसान बनाता है।

उदाहरण:

 public static IEnumerable<string> GetPrimaryKeyPropertyNames(DbContext db, Type entityType) { return db.Db(entityType).Pks.Select(x => x.PropertyName); } 

तालिका प्रति प्रकार विरासत के कारण मुझे उपरोक्त दोनों तरीकों के साथ समस्या थी मेरा कामकाजी संस्करण (@ एस'एफटी'के के समाधान पर आधारित है, लेकिन डेटास्पेस के उपयोग से। OSpace को इस कारण से डाटास्पेस नहीं। सीएसपीएस) नीचे है:

  protected IEnumerable<string> GetKeyPropertyNames() { var objectContext = ((System.Data.Entity.Infrastructure.IObjectContextAdapter) this.Context).ObjectContext; return GetKeyPropertyNames(typeof (TEntity), objectContext.MetadataWorkspace); } private static IEnumerable<string> GetKeyPropertyNames(Type type, MetadataWorkspace workspace) { EdmType edmType; if (workspace.TryGetType(type.Name, type.Namespace, DataSpace.OSpace, out edmType)) { return edmType.MetadataProperties.Where(mp => mp.Name == "KeyMembers") .SelectMany(mp => mp.Value as ReadOnlyMetadataCollection<EdmMember>) .OfType<EdmProperty>().Select(edmProperty => edmProperty.Name); } return null; } 

उपयोगकर्ता की तरह, मैं भी उपयोगकर्ता लादिस्लाव मृणाका के उत्तर का एक प्रकार चाहता था, जिसे केवल समय के संकलन के प्रकार जानने के लिए रनटाइम पर टाइप करने की आवश्यकता होती है। इसके अलावा उपयोगकर्ता राशलेहप की तरह, उपयोगकर्ता एस'फट'क्र का समाधान मेरे लिए काम नहीं करता, लेकिन उसका समाधान काम करता था। नीचे, मैं इस वार्तालाप में योगदान करता हूं, जो उनके जवाब का एक सरल संस्करण प्रदान करता है जो मेरे लिए काम करता था हालांकि, मैं सिर्फ उपयोगकर्ता अंजद्रे के समाधान के बारे में सीखा है और वह यही है जो मैं उपयोग कर रहा हूं।

 // variable "type" is a System.Type passed in as a method parameter ((IObjectContextAdapter)context) .ObjectContext .MetadataWorkspace .GetItem<EntityType>(type.FullName, DataSpace.OSpace) .KeyProperties .Select(p => p.Name);