2010-04-14 5 views
9

का उपयोग कर तालिका में मौजूद मानों से एनम उत्पन्न करें मेरी आवश्यकता डीबी से तालिका में मौजूद मानों के आधार पर एक एनम बनाना है। मैं ADO.NET इकाई फ्रेमवर्क मॉडल (.edmx फ़ाइल) का उपयोग कर रहा हूं, क्या आप में से कोई भी मेरी मदद कर सकता है।ADO.NET इकाई फ्रेमवर्क

उत्तर

10

टी 4 टेम्पलेट्स का उपयोग करना शायद बहुत आसान है। Here is a really good article on getting started

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

निर्देशिका में एक्सटेंशन .tt के साथ एक फ़ाइल बनाएं जहां आप गणना फ़ाइल उत्पन्न करना चाहते हैं। यदि आप XXXXX.tt फ़ाइल को नाम देते हैं तो XXXXX.cs नामक एक फ़ाइल जेनरेट की जाएगी, इसलिए टीटी फ़ाइल को उचित रूप से नाम दें।

इन पंक्तियों के साथ कुछ प्रयास करें। आपको सिंटैक्स और आउटपुट के साथ थोड़ा प्रयोग करने की आवश्यकता हो सकती है, लेकिन मैं इसे आपके लिए लिखने वाला नहीं हूं या आप कुछ भी नहीं सीखेंगे :)

बस जागरूक रहें, कि यह डेटाबेस कॉल किया जाएगा हर बार जब आप टीटी फाइल संपादित करते हैं।

<#@ template language="C#" hostspecific="True" debug="True" #> 
<#@ output extension="cs" #> 
<#@ assembly name="System.Data" #> 
<#@ import namespace="System.Data" #> 
<#@ import namespace="System.Data.SqlClient" #> 
<# 
    SqlConnection sqlConn = new SqlConnection(@"Data Source=XXXX;Initial Catalog=XXXX; Integrated Security=True"); 
    sqlConn.Open(); 
#> 
namespace AppropriateNamespace 
{ 
public enum YourEnumName 
{ 
    <# 
    string sql = string.Format("SELECT Id, Name FROM YourTable ORDER BY Id"); 
    SqlCommand sqlComm = new SqlCommand(sql, sqlConn); 
    IDataReader reader = sqlComm.ExecuteReader(); 

    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    while (reader.Read()) 
    { 
     sb.Append(FixName(reader["Name"].ToString()) + " = " + reader["Id"] + "," + Environment.NewLine + "\t\t"); 
    } 
    reader.Close(); 
    sqlComm.Dispose(); 
    #> 
<#= sb.ToString() #> 
    } 
} 

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

+0

मुझे नहीं पता कि टी 4 टेम्पलेट हैं .. –

+0

मैं वर्तमान में एक उपयोगी लिंक –

+0

ठीक है ... धन्यवाद ... –

7

डैनियल टेम्पलेट अच्छा और सब है, लेकिन मैं such a template में कुछ और अधिक प्रयास डाल दिया है तो यह सब इन करता है:

  • स्पष्ट पूर्णांक मूल्यों के साथ गणना मूल्यों उत्पन्न करता है;
  • विजुअल स्टूडियो के नेमस्पेस नामकरण सम्मेलन का उपयोग करता है, इसलिए जेनरेट की गई गणनाओं में प्रोजेक्ट का डिफॉल्ट नेमस्पेस होता है जिसमें किसी भी उपफोल्डर संलग्न होते हैं (जैसे विजुअल स्टूडियो में किसी भी कोड फ़ाइल की तरह);
  • अतिरिक्त विवरण तालिका कॉलम मानों का उपयोग करके पूर्ण गणना XML दस्तावेज़ को जोड़ता है; यदि आपके पास ये कभी दिमाग नहीं है;
  • सही ढंग से जेनरेट की गई फ़ाइल का नाम देता है और कोड में एक अतिरिक्त विशेषता जोड़ता है ताकि उत्पन्न enum कोड विश्लेषण द्वारा जांच नहीं की जा सके;
  • मल्टी-वर्ड लुकअप टेबल मान सही ढंग से पास्कल-आधारित समकक्षों (यानी मल्टी शब्द मानMultiWordValue) के साथ संगत हैं;
  • गणना मूल्य हमेशा एक पत्र से शुरू होते हैं;
  • सभी गणना मूल्यों में केवल अक्षरों और संख्याएं होती हैं, बाकी सब कुछ काटा जाता है;

वैसे भी। this blog post में सब कुछ बहुत अच्छी तरह से प्रलेखित है।

+2

उत्कृष्ट। अच्छा अनुवर्ती –