2009-04-16 11 views
6

मैंने अभी सबसनिक 2.2 का उपयोग करना शुरू कर दिया है और अब तक बहुत प्रभावित है - लगता है कि यह मुझे कुछ गंभीर कोडिंग समय बचाएगा।सबसनिक - नामस्थान के हिस्से के रूप में एसक्यूएल स्कीमा/मालिक का नाम कैसे उपयोग करें?

इससे पहले कि मैं इसे पूर्ण समय में उपयोग करने में कूदूं, हालांकि मुझे कुछ हल करने के लिए कुछ है जो मैं हल करना चाहता हूं।

मेरे वर्तमान डेटाबेस (एक SQL2008 डीबी) में मैंने स्कीमा/मालिक नाम द्वारा अलग-अलग हिस्सों में तालिकाओं, विचारों, एसपी आदि को विभाजित किया है, इसलिए सभी ग्राहक तालिका ग्राहक में हैं। स्कीमा, उत्पाद में उत्पाद। स्कीमा इत्यादि, इसलिए ग्राहक पता तालिका से चयन करने के लिए मैं ग्राहक से चुनिंदा * करूंगा।

दुर्भाग्यवश, सबसनिक स्कीमा/मालिक नाम को अनदेखा करता है और बस मुझे बेस टेबल नाम देता है। यह ठीक है क्योंकि मेरे पास स्कीमा के बीच कोई डुप्लीकेट नहीं है (उदाहरण के लिए ग्राहक। एड्रेस और प्रदायक। एड्रेस दोनों मौजूद नहीं हैं) लेकिन मुझे लगता है कि अगर मैं स्कीमा द्वारा विभाजित कर सकता हूं तो कोड स्पष्ट हो सकता है।

आदर्श रूप से मैं स्कीमा/मालिक द्वारा नेमस्पेस को बदलने में सक्षम होना चाहता हूं - मुझे लगता है कि इससे सबसोनिक पर कम से कम प्रभाव पड़ेगा, फिर भी परिणामी कोड को पढ़ने में आसान बना दिया जाएगा।

समस्या यह है कि, मैंने सब सबसोनिक स्रोत को क्रॉल किया है और इस बारे में कोई संकेत नहीं है कि यह कैसे करें (मैं वीबी में कोड नहीं करता हूं # = हाँ मुझे पता है, जेडएक्स स्पेक्ट्रम को दोष दें !!)

किसी को भी करने से पहले इस घेरने की कोशिश की है या यह कैसे हल करने के लिए पर एक विचार है गया है, तो मैं सच में आभारी हूँ,

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

एड

उत्तर

6

मैं भी एकाधिक प्रदाता दृष्टिकोण का सुझाव देने जा रहा था। लेकिन स्वामित्व के लिए बहुत सारी पाइपलाइन पहले से ही सबसोनिक में है। यदि आप CS_ClassTemplate.aspx में कुछ पंक्तियां संपादित करते हैं तो आप प्रत्येक मालिक प्रोफ़ाइल के लिए नामस्थान बना सकते हैं।

namespace <%=provider.GeneratedNamespace%><%=owner%> 

जहां मालिक है करने के लिए लाइन 58 (मैं v2.1 उपयोग कर रहा हूँ) के आसपास बदलें

string owner = "." + tbl.SchemaName; 
if(owner == ".dbo") 
    owner = ""; 

आपको लगता है कि डाल से ऊपर, लाइन 14. इस तरह के आसपास आप हर के लिए एक नाम स्थान हो सकता है मालिक जैसे: नॉर्थविंड। सप्लायर, नॉर्थविंड। ग्राहक, आदि मैंने सिर्फ नॉर्थविंड के रूप में डब्बू छोड़ा ताकि सभी परीक्षण बिना संपादन के संकलित हो जाएंगे। मैंने एक साधारण चयन क्वेरी चलाई और मुझे लगता है कि यह आपके इच्छित तरीके से काम करेगा।

+0

आपको ओडीएस कंट्रोलर और स्ट्रक्चर जनरेटर को थोड़ा बदलना होगा, लेकिन यह बहुत आसान है। –

+0

मुझे एक समान स्थिति मिली है। हालांकि यह अलग-अलग स्कीमा में समान नाम रखने वाली कुछ तालिकाओं को लेकर जटिल है। क्या इसके चारों ओर कोई रास्ता है? – Muxa

1

आप अलग प्रदाताओं, समान ही अंतर्निहित डेटाबेस कनेक्शन है तो तरह कर रही कोशिश कर सकते:

<SubSonicService defaultProvider="DBData"> 
<providers> 
<clear/> 
    <add name="DBData" type="Subsonic.SqlDataProvider, SubSonic" connectionStringName="LocalSqlServer" generatedNamespace="DBData" includeTableList="table_a,table_b" spStartsWith="app,get,set" viewStartsWith="v_" /> 
    <!--CMS Provider--> 
    <add name="CMS" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="LocalSqlServer" generatedNamespace="CMS" stripTableText="CMS_" includeTableList="CMS_Content,CMS_Page" useSPs="false"/> 
</providers> 
</SubSonicService> 

मुझे नहीं लगता कि आप इस तरह से एक कुंजी के रूप स्कीमा ही उपयोग कर सकते हैं करते हैं , लेकिन आप कम से कम समस्या के साथ काम कर सकते हैं TableList और जेनरेट नेमस्पेस के संयोजन के साथ। आपने कहा कि आपके पास अलग-अलग स्कीमा में डुप्लिकेट टेबल नाम नहीं हैं, इसलिए यह काम कर सकता है।

+0

हाय, त्वरित उत्तर के लिए धन्यवाद :-) मेरे पास भारी उपयोग से लेकर प्रकाश (कॉन्फ़िगर सामग्री) उपयोग के कुल में 6 स्कीमा हैं। बिट एक ही डीबी के लिए 6 अलग कनेक्शन के बारे में चिंतित है। मेरे सिर के पीछे थोड़ा लड़का यह कह रहा है कि यह एक बुरा विचार है लेकिन यकीन नहीं है .. – CResults

1

बस आपको यह बताने के लिए कि अब यह काम कर रहा है - या कम से कम, संकलन! :-) मालिक समाधान को पूरी तरह से काम करने के लिए, हालांकि आपको कक्षा टेम्पलेट में और अधिक परिवर्तन करने की आवश्यकता होगी अन्यथा तालिका/कुंजी फ़ंक्शन गलत नामस्थान में बैठे हैं।

मैंने संग्रहीत प्रक्रिया टेम्पलेट के साथ भी हैक किया है।मैं नहीं कर सकता (मेरे पास कम समय में) प्रत्येक मालिक के लिए अलग-अलग फ़ाइलों/नामस्थानों में विभाजित करने के लिए कैसे काम करता है, इसके बजाय मैंने मालिक के साथ प्रत्येक स्पैम फ़ंक्शन को प्रीफ़िक्स किया है और अंडरस्कोर।

हालांकि, अगर आपको एक ही समस्या है तो आपको ठीक करना संभव होगा।

एड

3

साथ ही आप 3.0 में ऐसा कर सकता है हमारे टी -4 टेम्प्लेट (लेकिन यह 3.5 केवल है)। यह प्रतिक्रिया का एक बहुत अच्छा सा है - हमें इसे डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से बनाना चाहिए!

खुशी है कि आपको यहां कुछ मदद मिली है।

संबंधित मुद्दे