2012-03-01 36 views
9

मैं अपने इकाई की रूपरेखा मॉडल की तरह public के बजाय, internal पहुँच संशोधक के साथ संस्थाओं उत्पन्न करने के लिए चाहते हैं। मैं पुस्तकालय में ईएफ मॉडल का उपयोग करता हूं और मैं केवल एक वर्ग (कुछ नियंत्रक) को बाहर से सुलभ करना चाहता हूं।सभी इकाइयों तक पहुंच कैसे बनाएं: ईडीएमएक्स में जनता के बजाय आंतरिक?

क्या ईएफ मॉडल पीढ़ी internalpublic के बजाय मॉडिफर का उपयोग करने के लिए कोई आसान तरीका है, जिसमें अद्यतन पर मॉडल पुनर्जन्म शामिल है?

उत्तर

1

यह similar question पर मिलने वाले एवर की तरह है। लेकिन आपके मामले में आप ऑब्जेक्ट कॉन्टेक्स्ट की बजाय कक्षाओं के एक्सेस संशोधक को कस्टमाइज़ करना चाहते हैं।

HVD के जवाब के बाद अनुकूलित

डिजाइनर एक विकल्प "जोड़ें कोड जनरेशन आइटम" है। यदि आप इसका उपयोग करते हैं, तो आपको कई विकल्प मिलेंगे। मैं "एडीओ.NET स्व-ट्रैकिंग इकाई जेनरेटर" का उपयोग कर रहा हूं, लेकिन वैसे ही उन सभी के लिए काम करता है। इसे चुनने से आपकी परियोजना में दो टेम्पलेट फ़ाइलें (Model.tt और Model.Context.tt) जोड़ती हैं, जिन्हें आप फिट देखते हुए संशोधित करने के लिए स्वतंत्र होते हैं। संशोधन के बारे में पूछ रहे हैं के लिए, आप

< # = Accessibility.ForType (इकाई) #> < # = code.SpaceAfter पर या लाइन 37. बदलें पास अपने इकाई वर्गों के लिए एक कोड पीढ़ी मिल जाएगा (code.AbstractOption (इकाई)) #> आंशिक वर्ग ...

आंशिक वर्ग के लिए ...

जटिल प्रकार के लिए नीचे एक समान रेखा नीचे दी गई है: "आंशिक" से पहले भाग को मिटा दें।

यह सभी प्रकार के लिए एक्सेस संशोधक सेट करेगा, भविष्य के प्रकार शामिल हैं। व्यक्तिगत प्रकारों को अनुकूलित करने के लिए आप मॉडल ब्राउज़र का बेहतर उपयोग करते हैं।

आपको मॉडल के "इकाई कंटेनर एक्सेस" को आंतरिक रूप से भी सेट करना होगा, अन्यथा असंगत एक्सेस संशोधक वाले सदस्य उत्पन्न होंगे।

3

ज़रूर, मॉडल ब्राउज़र विंडो में चयन> EntityTypes

Model Browser

और अपने प्रकार गुण विंडो पहुँच संशोधक में सेट पर। आपको EntityContainer> EntitySets में सेट के लिए संशोधक को संशोधित करना चाहिए, जैसे कि प्रकार आंतरिक है, सेट कम से कम आंतरिक भी होना चाहिए (डिफ़ॉल्ट सार्वजनिक)।

ऑप्टिनली आप टी 4 टेम्पलेट का उपयोग कर सकते हैं, जहां आप जेनरेट किए गए संशोधित संशोधन को सीधे संशोधित कर सकते हैं।

+0

मुझे प्रॉपर्टी विंडो से अवगत है, लेकिन यह मुझे कई इकाइयों का चयन करने और एक ही समय में उनके एक्सेस संशोधक सेट करने की अनुमति नहीं देता है। मुझे इसे एक-एक करके करना है। मुझे लगता है मुझे टी 4 टेम्पलेट्स देखने की जरूरत है। –

+2

एक्सएमएलएक्स फ़ाइल को एक्सएमएल एडिटर के साथ खोलें (यह एक सादा एक्सएमएल फाइल है) और वहां बैच को प्रतिस्थापित करें। 20 सेकंड में हो गया। –

+0

हाँ, मैं कुछ और स्थायी समाधान के लिए जा रहा था (जहां संशोधक कोड पुनर्जन्म से प्रतिस्थापित नहीं किए जाएंगे), लेकिन यह भी ठीक है। –

0

मैं चाहता था कि मेरी इकाई कंटेनर के साथ-साथ उत्पन्न जटिल कक्षाएं आंतरिक हों। सबसे पहले मैंने आंतरिक रूप से "इकाई कंटेनर एक्सेस" सेट किया। इसके बाद मैंने आइटम कोलेक्शन वैरिएबल के प्रारंभ के बाद "Model.tt" फ़ाइल के शीर्ष पर एक कंटेनर चर जोड़ा। मुझे "Model.Context.tt" फ़ाइल में कंटेनर चर कोड मिला।

var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile); 
    var container = itemCollection.OfType<EntityContainer>().FirstOrDefault(); 

अगला मैं

<#=Accessibility.ForType(complex)#> partial class <#=code.Escape(complex)#> 

बदल

<#=Accessibility.ForType(container)#> partial class <#=code.Escape(complex)#> 

लिए मैं इतना है कि मैं कंटेनर के साथ सिंक में मेरी जटिल वर्ग कंटेनर पहुँच संशोधक रख सकता है इस तरह से कोड को संशोधित करने के लिए चुना एक्सेस संशोधक।

सही दिशा में मुझे अग्रणी बनाने के लिए Gert Arnold धन्यवाद।