14

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

हमारे पास एक विस्तृत डीबी है, जिसमें कई टेबल हैं जिन्हें मुझे प्रतिनिधित्व करने की आवश्यकता नहीं है। क्या इनमें से एक सबसेट चुनने का कोई आसान तरीका है, और केवल उन अभियंता रिवर्स?

उत्तर

9

मैं एक समाधान है जो काम करता है, हालांकि यह "अतिरिक्त" चरणों की एक जोड़ी की आवश्यकता है पाया:

परियोजना में, राइट क्लिक करें और Add चयन ->new Item। बाईं ओर Data और आइटम सूची से ADO.NET Entity Data Model चुनें।

अब दिखाए गए संवाद/विज़ार्ड से, आप एक मॉडल उत्पन्न करने के लिए एक डीबी का चयन कर सकते हैं, और इस मामले में, आप केवल टेबल, विचार और संग्रहीत प्रक्रियाओं और कार्यों को चुन सकते हैं।

मॉडल जोड़ने के बाद, आप इसे हल एक्सप्लोरर में विस्तार कर सकते हैं, और आप YourModelName.edmx के तहत कक्षाएं आप की जरूरत खोजना चाहिए ->YourModelName.tt

नोट: आप खींचें करने के लिए सक्षम नहीं होगा और ड्रॉप स्रोत-फाइलें बाहर हैं, लेकिन आप राइट क्लिक कर सकते हैं और copy class चुन सकते हैं। फिर आप उन्हें पेस्ट कर सकते हैं जहां आपको उनकी आवश्यकता है, और वे उनके नामों में संलग्न "1" के साथ दिखाई देंगे। इसलिए आपको कुछ प्रकाश रिफैक्टरिंग (फाइलों, वर्गों और नामस्थानों का नाम बदलना) करने की आवश्यकता होगी, लेकिन यह अभी भी काफी आसान है।

अब आप मूल मॉडल (edmx-file), और इसके तहत सबकुछ हटा सकते हैं।

एक सही समाधान नहीं है, लेकिन बड़ी संख्या में तालिका-प्रस्तुतिकरण उत्पन्न करने के लिए अभी भी आसान है (और नौकरी को पूरा करने के लिए वीएस की प्रतीक्षा करें!) यदि आपके पास बहुत सारी अनावश्यक तालिकाओं, विचार इत्यादि हैं

+0

यह वास्तव में "चट्टानों" - एक अच्छे तरीके से। याद रखें, अगर आप एक ईएफ-रिवर्स इंजीनियरिंग अनुभव चाहते हैं, तो एंटीटी डेटा मॉडल विज़ार्ड आने पर "डेटाबेस से कोड फ्रिस्ट" चुनें। – JosephDoggie

+0

यह anwser क्यों है? यह "एंटिटी फ्रेमवर्क पावर टूल्स" नहीं है, यह edmx – khoailang

3

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

मैं इस के आसपास काम करने के लिए दो मुख्य दृष्टिकोण को देखा है:

  1. ट्वीक रिवर्स इंजीनियरिंग टेम्पलेट्स सभी अवांछित टेबल अनदेखी करने के लिए (हालांकि मैं व्यक्तिगत रूप से इस गन्दा लगता है)। यदि आप चल रहे हिस्सों पर शुरू करना चाहते हैं, तो रोवन मिलर (http://romiller.com/2012/05/09/customizing-reverse-engineer-code-first-in-the-ef-power-tools/)

  2. केवल डमी डीबी बनाएं जिसमें आप रुचि रखते हैं और रिवर्स इंजीनियरिंग को अपना जादू दें। इसका एक विकल्प "विशेष डीबी उपयोगकर्ता" होना है जिसमें केवल प्रासंगिक तालिकाओं तक पहुंच हो और कनेक्ट होने पर इसका उपयोग करें।

+0

युक्तियों के लिए धन्यवाद, इसकी सराहना करें! दिलचस्प विचार, विशेष रूप से "विशेष उपयोगकर्ता" -कल्पना - अच्छा विचार! मुझे एक समाधान मिला जो मेरी समस्या को हल करता है; अपना जवाब देखें। – Kjartan

+0

नए ईएफ के लिए * अब * है (इस पृष्ठ पर उत्तरों देखें)। – JosephDoggie

10

अपने डेटाबेस SQL ​​सर्वर है, या SQL सर्वर सीई 4.0 तो आप यह मेज TableFilterExclude, TableFilterInclude के उपयोग के माध्यम से फ़िल्टरिंग है visualstudiogallery.msdn.microsoft.com

पर "इकाई की रूपरेखा रिवर्स POCO जेनरेटर" उपलब्ध उपयोग कर सकते हैं।

तरह से फिल्टर काम इस प्रकार हैं:

  1. स्कीमा
  2. पढ़ें किसी भी तालिका कि, बाहर फिल्टर से मेल खाते मौजूद होने पर निकालें।
  3. मौजूद कोई भी तालिका शामिल करें, जिसमें मौजूद फ़िल्टर शामिल है, यदि मौजूद है।

उदाहरण:

TableFilterExclude = new Regex("billing|report"); 
TableFilterInclude = new Regex("company"); 

को देखते हुए निम्न तालिकाओं:

  • some_table
  • कंपनी
  • company_billing_annual
  • company_billing_ledger
  • company_reports
  • company_events
  • another_table।

बिलिंग या नाम के साथ किसी भी तालिका को तुरंत बाहर रखा गया है। नाम में कंपनी के साथ कोई भी तालिका शामिल है।

  • कंपनी
  • company_events
+1

का उपयोग करता है आपके टेम्पलेट्स पावर टूल से बेहतर तरीके से हैं। मैंने पावर टूल के साथ 1000 टेबल जेनरेट किए और यह एक घंटे की तरह था, आपके टूल्स के साथ कई अनुकूलन, बूम ... <1 मिनट। आप के लिए कुडोस। बढ़िया काम। – SSA

3

एक जवाब के साथ एक पुरानी सवाल लेकिन यह केवल एक है कि गूगल खोज से आया है, इसलिए मुझे लगता है मैं पोस्ट होता लगा दिया गया है:

आप के साथ छोड़ दिया जाता है के लिए मेरा समाधान इकाई फ्रेमवर्क पावर टूल्स टेबल का एक सबसेट फ़िल्टर करें।

  • VSIX एफई पावर उपकरण स्थापित करने के बाद आगे जाना है और सही एक समाधान पर क्लिक करें और इकाई की रूपरेखा का चयन -> कस्टम रिवर्स इंजीनियर टेम्पलेट्स। कुछ .tt फाइलें स्लन-रूट/कोड टेम्पलेट्स/रिवर्सइंजिनर कोडफेस्ट के तहत उत्पन्न की जाएंगी, उनमें से प्रत्येक को खोलें।

  • Context.tt - foreach लूप के अंदर छानने के लिए लाइन 27 और पेस्ट कोड में foreach पाश लगता है:

    // START Filter for specific tables only 
    string[] filterTables = new string[] { "Motorcycle", "Person" }; 
    if (!filterTables.Contains(set.ElementType.Name.ToString())) 
    { 
        continue; 
    } 
    // END Filter for specific tables only 
    

इस में निर्दिष्ट नहीं तालिकाओं के लिए public DbSet< लाइनों पैदा करने बच जाएंगे आपके फिल्टरटेबल सरणी।

फोरच लूप के अंदर लाइन 38 में ऊपर जैसा ही कोड पेस्ट करें। यह modelBuilder.Configurations.Add उत्पन्न करने से बच जाएगा।

  • इकाई।टीटी - लाइन 6 और पेस्ट कोड जो खाली वापस आ जाएगी खोजने के लिए और टेबल filterTables सरणी में नहीं करने के लिए फ़ाइल पैदा करने से बचने:

    // START Filter for specific tables only 
    string[] filterTables = new string[] { "Motorcycle", "Person" }; 
    if (!filterTables.Contains(efHost.EntityType.Name.ToString())) 
    { 
        return ""; 
    } 
    // END Filter for specific tables only 
    
  • Mapping.tt - लाइन 14 खोजने के लिए और उपर दिए गए कोड पेस्ट करें:

    // START Filter for specific tables only 
    string[] filterTables = new string[] { "Motorcycle", "Person" }; 
    if (!filterTables.Contains(efHost.EntityType.Name.ToString())) 
    { 
        return ""; 
    } 
    // END Filter for specific tables only 
    
  • सभी .tt फ़ाइलों को सहेजें और "रिवर्स इंजीनियर कोड फर्स्ट" के साथ मॉडल को पुन: उत्पन्न करें।

+0

आपको बहुत बहुत धन्यवाद। मैं थोड़ी देर के लिए इस तरह के संक्षिप्त उत्तर की तलाश में था। – user906573

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