2012-08-13 12 views
5

मैं प्रत्येक संपत्ति से संबंधित डेटाबेस में कॉलम का नाम शामिल करने के लिए एक POCO T4 टेम्पलेट को संशोधित करने का प्रयास कर रहा हूं। विरासत कारणों से, हमारी डेटाबेस तालिकाएं 8.3 हैं, और हमारे कॉलम अधिकतम 10 वर्ण हैं, इसलिए चीजें अव्यवस्थित हो जाती हैं। जल्दी से देखने में सक्षम होने के कारण किसी दिए गए संपत्ति से कौन सा कॉलम मेल खाता है, यह एक बड़ी मदद होगी।इकाई फ्रेमवर्क और डेटाबेस कॉलम नाम

यह देखते हुए कि, मुझे कोई संकेत नहीं है कि यह करने के बारे में कैसे जाना है। मैं टी 4 टेम्पलेट को संपादित करने के विचार से सहज हूं, मुझे नहीं पता कि एडमप्रॉपर्टी ऑब्जेक्ट से कॉलम नाम को कैसे पुनः प्राप्त किया जाए।

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

+0

मैं एडमप्रोपर्टी मान रहा हूं। नाम तुम्हारा मतलब नहीं है। आप अंतर्निहित कॉलम नाम चाहते हैं। – Maarten

+0

@ मार्टन - सही। – Bobson

उत्तर

1

मैंने पहले ही किसी अन्य उत्तर में इसकी चर्चा की है लेकिन मुझे यह नहीं पता है। समस्या यह है कि इस जानकारी को प्राप्त करने के लिए आपको मैपिंग के एमएसएल भाग को ब्राउज़ करने की आवश्यकता है - वह हिस्सा जहां कॉलम गुणों के लिए मैप किए जाते हैं। दुर्भाग्य से एमएसएल मेटाडेटा आइटम के लिए संपूर्ण एपीआई आंतरिक है (मुझे लगता है कि भविष्य में ईएफ रिलीज के लिए एक लक्ष्य इसे सार्वजनिक बनाना है)। जब आपके पास कक्षा पीढ़ी के लिए टी 4 टेम्पलेट होता है तो आप आमतौर पर सीएसडीएल के साथ काम करते हैं - यह इकाई विवरण है और इसमें केवल उन्हीं सूचनाएं हैं जिन्हें आप ईडीएमएक्स आरेख और संपत्तियों के लिए संपत्ति विंडो में देखते हैं।

+0

यह मेटाडाटा वर्कस्पेस में भी उपलब्ध नहीं है? कई अन्य उत्तरों यह इंगित करते थे कि यह था, हालांकि मैं यह नहीं समझ पाया कि टी 4 में इसे कैसे प्राप्त किया जाए। – Bobson

+0

मेटाडाटा वर्कस्पेस में यह उपलब्ध है लेकिन वर्कस्पेस पर पूछताछ बेस आइटम लौटाती है और आपको उन डेटा तक पहुंच प्राप्त करने के लिए उन्हें कास्ट करना होगा जिन्हें आप ढूंढ रहे हैं। एमएसएल के साथ समस्या यह है कि आप इसे नहीं डाल सकते हैं क्योंकि वे प्रकार सार्वजनिक नहीं हैं - आपको उन आंकड़ों को प्राप्त करने के लिए प्रतिबिंब का उपयोग करना होगा। –

+0

मुझे ऐसे उत्तर से प्रसन्नता होगी जो प्रतिबिंब का उपयोग करता है, मानते हैं कि टी 4 का मूल्यांकन होने पर प्रतिबिंब उपलब्ध है। – Bobson

0

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

तो, मैंने कोड का यह बिट जोड़ा जो सिर्फ "सरल गुण" लोड करता है, यानी कॉलम नाम, मुझे ऐसा करने की अनुमति देने के लिए। यह "कॉलम नाम" नामक "टेबल" ऑब्जेक्ट में एक स्ट्रक्चर जोड़ता है और स्तंभ नामों को कॉन्स स्ट्रिंग के रूप में उजागर करता है।

<# 
    if (simpleProperties.Any()) 
    { 
#> 
    public struct ColumnName 
    { 
    <# 
     foreach (var simpleProperty in simpleProperties) 
     { 
    #> 
     public const string <#= simpleProperty #> = "<#= simpleProperty #>"; 
    <# 
     } 
    #> 
    } 
<# } 
#> 
} 

मुझे लगता है कि समाधान में edmx फ़ाइल के तहत अलग-अलग फ़ाइलों को उत्पन्न करता है टी -4 टेम्पलेट में कोड के इस बिट से पहले इस रखा:

<# 
    EndNamespace(code); 
} 

कि कोड है कि इस तरह दिखता है पैदा करेगा:

public partial class JobPosting 
{ 
    public int PositionRowId { get; set; } 
    public System.Guid PositionRelatedGuid { get; set; } 

    public struct ColumnName 
    { 
     public const string PositionRowId = "PositionRowId"; 
     public const string PositionRelatedGuid = "PositionRelatedGuid"; 
    } 
} 

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

मेरे पास यह कोड मेरे सामने नहीं है, लेकिन 'simpleProperties' आपको 'edmx' फ़ाइल के आधार पर नाम नहीं देता है? यदि कॉलम को डेटाबेस में 'myColumnID' कहा जाता है, लेकिन मैंने इसका नाम बदलकर सी # स्थिरता के लिए' MyColumnId' 'कर दिया है, तो कौन सा नाम यहां दिखाया गया है? – Bobson

+0

जहां तक ​​मुझे पता है, और मैंने कल ईएफ सीखा है, इसलिए मैं गलत हो सकता हूं, यह edmx फ़ाइल पर आधारित है, इसलिए यदि आप इसे डिज़ाइनर में बदल देते हैं तो यह edmx नाम के साथ दिखाई देता है, न कि डेटाबेस नाम, परिणाम। –

+1

यही मैंने सोचा था। यह निश्चित रूप से एक अच्छा समाधान है, लेकिन एक अलग समस्या के लिए मैं कर रहा था। मेरा प्रश्न विशेष रूप से अंतर्निहित डेटाबेस नाम को पुनः नामित करने के बाद भी पुनर्प्राप्त करने के बारे में था। मुझे बहुत आश्वस्त है कि यह संभव नहीं है, लेकिन मैं आपको यह प्रश्न यहां छोड़ने के लिए प्रोत्साहित करता हूं जो इस प्रश्न को ढूंढता है। – Bobson

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