यदि यह किसी की मदद करता है, तो मुझे इसे पहले से जानने के बिना ऐसा करने में सक्षम होना चाहिए (इसलिए मैं आसानी से 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 के बजाय, प्रकार नाम और नाम स्थान के तार की आवश्यकता है, लेकिन यह है कि सबसे अच्छा मैं मिल सकता है।
स्रोत
2014-08-20 10:01:01
Thx। उत्तर के रूप में चिह्नित किया गया। मुझे टिप्पणी करना है कि आपके संदर्भ वर्ग (उदाहरण के लिए, IYourDataContext) में एक इंटरफ़ेस जोड़ने और IObjectContextAdapter को IYourDataContext में प्राप्त करना बेहतर विचार है। इस तरह आपको इसे कास्ट करने की ज़रूरत नहीं है। –
यह देखते हुए कि यह अब 5 पुराना है, क्या भारी प्रतिबिंब के बिना ऐसा करने का कोई तरीका है? मेरे प्रश्न का संदर्भ ट्रैकिंग के बिना एक खोज विधि को कार्यान्वित करने का प्रयास है, जैसे सिंगलऑर्डफॉल्ट() लेकिन बेस क्लास में जो इकाई के मुख्य नाम को नहीं जान सकता है। धन्यवाद दोस्तों। –
बहुत बहुत धन्यवाद, एक आकर्षण की तरह काम –