2009-03-04 11 views
6

In Linq2Sql you can connect a data context to multiple databases by just adding the database name to the sourceकई डेटाबेसों में ADO.Net इकाई फ्रेमवर्क

क्या लिंक 2 इकाइयों/ADO.net इकाई फ्रेमवर्क में इसे प्राप्त करने का कोई तरीका है? डेटाबेस नाम कहीं तालिका नाम में जोड़ा जा सकता है?

मैं MyDatabase.dbo को dbo से 'स्कीमा' बदलने की कोशिश की, लेकिन एफई करने के लिए 'स्कीमा' बदलने जैसे

SELECT FROM [MyDatabase.dbo].[MyTable] 

प्रवंचना में इस समाहित 'MyDatabase]। [Dbo'

SELECT FROM [MyDatabase]].[dbo].[MyTable] 

में छोड़ दिया जाएगा (ध्यान रहे दो ]]।)

उत्तर

8

पहले, this isn't officially supported

जो लिंक आप LINQ से SQL के लिए लिंक करते हैं वह डीबी सर्वर की विषम क्वेरी करने की क्षमता का उपयोग कर रहा है। मुझे नहीं लगता कि यह एंटिटी फ्रेमवर्क के लिए क्यों काम नहीं करेगा, क्योंकि यह एक डीबी सर्वर सुविधा है, न कि ढांचे की सुविधा। दूसरे शब्दों में, LINQ से SQL अभी भी कनेक्शन से निपट रहा है जैसे कि केवल एक डेटाबेस सर्वर शामिल था। ध्यान रखें, हालांकि, सभी डीबी सर्वर ऐसा नहीं कर सकते हैं।

जहां तक ​​ईडीएमएक्स में परिवर्तन करना है, "एसएसडीएल सामग्री" खंड में एंटीटीसेट नोड की स्कीमा विशेषता देखें।

इस तकनीक के बारे में एक चेतावनी यह है कि जब आप डेटाबेस से अपना मॉडल अपडेट करते हैं, तो स्टोरेज मॉडल मिटा दिया जाता है और स्क्रैच से बदल दिया जाता है। तो आपको इन परिवर्तनों को फिर से लागू करने की आवश्यकता होगी। यह LINQ से SQL में कोई समस्या नहीं है, क्योंकि LINQ से SQL डेटाबेस से स्वचालित अद्यतनों का समर्थन नहीं करता है।

संभवतः डेटाबेस में एक दृश्य बनाने के लिए एक बेहतर विकल्प होगा जो अन्य डेटाबेस और मानचित्र को संदर्भित करता है जो तालिका और अन्य डेटाबेस को मैप करने के बजाय सीधे देखता है।

+0

दृश्य केवल तभी काम करता है जब प्रत्येक डीबी एक ही डेटाबेस सर्वर पर है, अन्यथा आप क्रॉस डीबी जा रहे हैं। एसक्यूएल 2005+ में, मेरा मानना ​​है कि समानार्थी भी काम कर सकता है लेकिन मैं 100% नहीं हूं। परिवर्तनों के खोने के लिए, यदि आप डिज़ाइन का उपयोग करना बंद कर देते हैं और चार फ़ाइलों को मैन्युअल रूप से संपादित किया गया है तो यह एक समस्या होने पर रोकता है। – NikolaiDante

+0

मैंने डीबीओ से स्कीमा विशेषता को बदलने की कोशिश की, उदाहरण के लिए अन्य Database.dbo, इसका कोई फायदा नहीं हुआ। इन परिवर्तनों के बाद प्रश्न एक अपवाद 'अवैध ऑब्जेक्ट नाम अन्य Database.dbo.MyTable' फेंक देते हैं। – Sam

+0

नाथ, यदि किसी भिन्न सर्वर पर आपको किसी लिंक किए गए सर्वर (या तो ईएफ या LINQ-to-SQL के साथ) का उपयोग करना होगा। सैम, फिर दृश्य दृष्टिकोण आज़माएं। –

1

यदि आपका डेटाबेस SQL ​​समानार्थी का समर्थन करता है, तो आप दो डेटाबेस परिभाषाओं को एक फ़ाइल में विलय कर सकते हैं। मैंने हाल ही में ऐसा किया है और पोस्ट किया है यदि आपने रुचि रखते हैं तो मैंने इसे here कैसे किया।

असल में आप डेटाबेस बी पर इंगित करते हुए डेटाबेस ए पर समानार्थी बनाते हैं, प्रत्येक डेटाबेस के लिए एक अलग edmx फ़ाइल बनाते हैं, और उसके बाद edmx फ़ाइलों को एक फ़ाइल में मर्ज करने के लिए एक स्क्रिप्ट चलाते हैं जो किसी भी डेटाबेस को समानार्थी शब्द सेटअप से जोड़ता है।

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