2009-02-24 6 views
6

मुझे एक डेटाबेस मिला है, और ओ/आर-मैपर द्वारा बनाई गई एक इकाईसेट, LINQ के साथ यह सब कुछ उपयोग कर रही है।रनटाइम के दौरान LINQ O/R-M तालिका नाम/स्रोत कैसे बदलें?

ओ/आर-मैपर में मुझे प्रत्येक तालिका के लिए एक टेबल नाम (स्रोत) दर्ज करना होगा, जिसका उपयोग LINQ द्वारा जेनरेट किए गए एसक्यूएल के लिए किया जा रहा है। .dbml फ़ाइल में यह इस तरह दिखता है:

<Table Name="dbo.Customers" Member="Customers"> 

अब मैं इतना एसक्यूएल (उदाहरण के लिए, ग्राहक के बजाय customers2008) कुछ अन्य तालिका के विरुद्ध चलाया जाएगा रनटाइम के दौरान इस तालिका नाम बदलने के लिए, चाहते हैं।

रनटाइम के दौरान तालिका का नाम (स्रोत नाम) बदलने का कोई तरीका है?

[अद्यतन] मेरी निराशा के कुछ परीक्षणों के बाद मुझे यह पता लगाना पड़ा कि XmlMappingSource गणना की गई गुणों को प्रस्तुत करता है जो डेटाबेस में अनावश्यक नहीं हैं (हाँ, यहां तक ​​कि एसक्लमैटल द्वारा बनाई गई मैपिंग भी जो कुछ भी नहीं है उसे अनदेखा करता है)।

उत्तर

7

... आपको किस तरह की कुछ इस तरह कर दिया था:

  1. डिजाइनर में संस्थाओं बनाएँ।
  2. डिजाइनर द्वारा उत्पन्न .dbml फ़ाइल से xml मैपिंग फ़ाइल उत्पन्न करने के लिए SqlMetal का उपयोग करें।
  3. एक्सएमएल फ़ाइल में तालिका नाम अपडेट करें।
  4. फिर अपने कोड में, डेटाकॉन्टेक्स्ट कन्स्ट्रक्टर ओवरलोड का उपयोग करें जो xml मैपिंग फ़ाइल के साथ बनाए गए XmlMappingSource को स्वीकार करता है। http://weblogs.asp.net/guybarrette/archive/2008/07/23/linq-to-sql-dynamic-mapping.aspx

    मैं एक ईआरपी डेटाबेस ttccom001xxx जहां xxx स्थापना आईडी है की तरह तालिका नाम हैं उस के साथ इसी तरह की प्रक्रिया का उपयोग कर रहा (मुझे पता है:

यहाँ एक ब्लॉग पोस्ट को कदम से इस प्रक्रिया कदम बताते है यह एक भयानक स्कीमा है, लेकिन इसके बारे में कुछ भी नहीं है)। हमारे पास कई इंस्टॉलेशन हैं, इसलिए मैं प्रत्येक इंस्टॉलेशन के लिए प्रारंभिक एक्सएमएल मैपिंग कॉपी करता हूं और फिर इंस्टॉलेशन आईडी के साथ xxx को प्रतिस्थापित करता हूं। मैंने एक छोटा कंसोल ऐप लिखा जो प्रतिस्थापन की देखभाल करने के लिए रेगेक्स का उपयोग करता है और इसे मेरी निर्माण प्रक्रिया के हिस्से के रूप में जोड़ा जाता है।

+0

अब मुझे केवल रनटाइम के दौरान इस मैपिंग फ़ाइलों को बनाने का एक तरीका चाहिए, इसलिए मुझे मैपिंग फ़ाइल डेटा कक्षाओं के साथ संरेखण में रखने और रखने की आवश्यकता नहीं होगी। – Sam

+0

ओह ठीक है, मैं इन फ़ाइलों को बनाने में कामयाब रहा, लेकिन हां, वे उम्मीद के अनुसार काम नहीं करते हैं। अब कल से बाहर चल रहा है, और कल। – Sam

+0

मैं रनटाइम के बजाय पोस्ट-बिल्ड इवेंट में एक्सएमएल मैपिंग बनाने की अनुशंसा करता हूं। – jrummell

3

यहां माइक्रोसॉफ्ट के External Mapping Reference का एक लिंक है।

बाहरी मैपिंग विशेषता-आधारित मैपिंग ओवरराइड करता है।

यहां आवश्यक है।

  1. कुछ मैपल बनाएं जो आपके मैपिंग का प्रतिनिधित्व करते हैं।
  2. XmlMappingSource नया बनाएं और इसे अपना एक्सएमएल दें।
  3. जब आप अपना डेटा कॉन्टेक्स्ट बनाते हैं, तो एक निर्माता का उपयोग करें जो XmlMappingSource को स्वीकार करता है, जैसे this one
+0

आपके पास एक लिंक या कुछ स्रोत नहीं है जो चल रहे प्रोग्राम में मैपिंग फ़ाइल कैसे बनाएं? – Sam

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