2010-04-21 2 views
12

में एंटीटी टाइप टाइप करने के लिए एंटिटीसेट नाम प्राप्त करें, जैसे कि "संपर्क", एक एंटीटी टाइप टाइप किया गया है, मैं इसे एंटिटीसेट के नाम से कैसे प्राप्त कर सकता हूं, यानी "संपर्क" जैसे बहुवचनीकरण?ईटी

+0

मुझे लगता है कि आपके पास ऑब्जेक्ट का उदाहरण नहीं है? – Nix

+0

@ निक्स I भी एक ही समस्या थी, मेरा प्रकार टी param था, तो निश्चित रूप से वस्तु का कोई उदाहरण नहीं था? –

+0

मुझे इसके लिए टिप्पणी करना और धन्यवाद देना है, क्योंकि मैं 'संपर्क' और 'संपर्क' के एक ही मुद्दे में भाग गया – cost

उत्तर

30

आप पहले से ही एक संलग्न इकाई (जाहिर है आप, पहली पंक्ति की जरूरत नहीं है बस अपने मौजूदा इकाई का उपयोग करें) है, तो:

Contact c = context.Contacts.Where(x => x.blah).FirstOrDefault(); 
    string setName = c.EntityKey.EntitySetName; 

या आप नहीं करते हैं:

string className = typeof(Contact).Name 
var container = 
    context.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace); 
    string setName = (from meta in container.BaseEntitySets 
              where meta.ElementType.Name == className 
              select meta.Name).First(); 
+0

बहुत अच्छा। मुझे पीओसीओ इकाइयों के अतिरिक्त अनुकूलन करने की आवश्यकता थी, जैसे कि सभी इकाई वर्गों में GetById() विधियों को जोड़ना। –

+0

जीनियस, मैं उम्र के लिए ऐसा करने की कोशिश कर रहा हूं, बहुत धन्यवाद, एक महान उत्तर के लिए +1 –

+0

ध्यान दें कि CSpace क्वेरी केवल डेटाबेस से कनेक्ट होने पर ही काम करती है, इसलिए यह उन परिदृश्यों में काम नहीं करेगी जहां आप बस सीधे प्रकार पूछना चाहते हैं। –

6

इस विस्तार के उपयोगी हो सकता है

public static class MyExtensions 
{ 
    public static string GetEntitySetName<T>(this ObjectContext context) 
    { 
     string className = typeof(T).Name; 

     var container = context.MetadataWorkspace.GetEntityContainer(context.DefaultContainerName, DataSpace.CSpace); 
     string entitySetName = (from meta in container.BaseEntitySets 
           where meta.ElementType.Name == className 
           select meta.Name).First(); 

     return entitySetName; 
    } 
} 

और की तरह उपयोग:

db.AttachTo(db.GetEntitySetName<MyEntityType>(), myEntityInstance);