डेटाबेस में तालिकाओं को गिनने के तरीके पर आपके पहले प्रश्न के लिए, यह कोड उन्हें आपके लिए प्राप्त करेगा, निश्चित रूप से वे आपके ईडीएम में आयात किए गए हैं जो आपके डेटा स्टोर में सभी टेबल नहीं हैं।
var tableNames = context.MetadataWorkspace.GetItems(DataSpace.SSpace)
.Select(t => t.Name)
.ToList();
इस कोड को इस संदेश के साथ एक InvalidOperationException कारण होगा:
अंतरिक्ष 'SSpace' नहीं जुड़े संग्रह
है और वह क्योंकि CSpace, SSpace (SSDL) के विपरीत लोड नहीं है यह है जब तक है जरूरत है। और मेटाडाटा वर्कस्पेस के साथ उन्हें पढ़ने की कोशिश कर रहा है, इसकी आवश्यकता नहीं है। क्वेरी संकलन के दौरान, फिर ऑब्जेक्ट भौतिकरण पर इसकी आवश्यकता होती है। इसलिए मेटाडाटा वर्कस्पेस को हमारे लिए लोड करने के लिए इसे चालित करने के लिए हमें मुख्य क्वेरी चलाने से पहले नीचे की तरह एक क्वेरी चलाने की आवश्यकता है जो हमें टेबल नाम देता है।
string temp = ((ObjectQuery)context.[EntitySetName]).ToTraceString();
आप यहाँ से अधिक पढ़ सकते हैं: Quick Trick for forcing MetadataWorkspace ItemCollections to load
हालांकि, अगर आपका इरादा अपने प्रकार टेबल के खिलाफ एक गतिशील क्वेरी बनाने के लिए है, तो आप SSpace के साथ चारों ओर गंदगी की जरूरत नहीं है, आप के लिए है इसे सीएसपीएएस (अवधारणात्मक मॉडल) से प्राप्त करें।
ObjectResult<DbDataRecord> GetAllTypes(string name) {
using (TypeEntities context = new TypeEntities()) {
MetadataWorkspace metadataWorkspace = context.MetadataWorkspace;
EntityContainer container = metadataWorkspace.GetItems<EntityContainer>
(DataSpace.CSpace).First();
string namespaceName = metadataWorkspace.GetItems<EntityType>
(DataSpace.CSpace).First().NamespaceName;
string setName = string.Empty;
string entityName = name + "Type";
EntitySetBase entitySetBase = container.BaseEntitySets
.FirstOrDefault(set => set.ElementType.Name == entityName);
if (entitySetBase != null) {
setName = entitySetBase.Name;
}
EntityType entityType = metadataWorkspace
.GetItem<EntityType>(namespaceName + "." + entityName, DataSpace.CSpace);
StringBuilder stringBuilder = new StringBuilder().Append("SELECT entity ");
stringBuilder
.Append(" FROM " + container.Name.Trim() + "." + setName + " AS entity ");
string eSQL = stringBuilder.ToString();
ObjectQuery<DbDataRecord> query = context.CreateQuery(eSQL);
ObjectResult<DbDataRecord> results = query.Execute(MergeOption.AppendOnly);
return results;
}
}
कोड स्पष्टीकरण:: मेरे धारणा गया था कि अपने प्रकार तालिका नाम में "प्रकार" समाप्त हो जाती नीचे दिए गए तालिका नाम का केवल एक हिस्सा होने के साथ एक गतिशील क्वेरी बनाने के लिए पर एक नमूना कोड है एक पोस्टफिक्स (जैसे कलरटाइप) के रूप में, ताकि आप GetAllType ("रंग") पर कॉल कर सकें और यह आपके मॉडल में ColorType EntityObject की खोज करे और आपको सभी संभावित मान देगा। कोड डरावना लग सकता है लेकिन यह बहुत आसान सामान है। असल में यह सब कुछ है कि यह विधि पैरामीटर के आधार पर मेटाडेटा (जैसे एंटीटीसेट नाम, नेमस्पेस नाम, आदि ...) से सभी आवश्यक जानकारी प्राप्त करता है और फिर फ्लाई पर एक EntitySQL क्वेरी का निर्माण करता है, फिर इसे निष्पादित करता है और वापस लौटाता है परिणाम है।
स्रोत
2010-10-08 18:56:55
टेबल्स या संस्थाओं से यह नमूना कोड? सार या ठोस? नाम या प्रकार? क्यूं कर? कृपया विशिष्ट रहें। –
टेबल्स - यही वह है। बस टेबल एसक्यूएल सर्वर में sysobjects पूछताछ करके आप जिस तरह की चीज प्राप्त करेंगे। – Michael
क्या आप अपने संदर्भ में या डीबी में टेबल चाहते हैं? – Nix