2009-09-29 10 views
43

का उपयोग करके मैं अक्सर विभिन्न डेटाबेस में तालिकाओं में डेटा की तुलना कर रहा हूं। इन डेटाबेस में एक ही स्कीमा नहीं है। टीएसक्यूएल में, मैं तुलना के लिए डेटा खींचने के लिए उन्हें डीबी> उपयोगकर्ता> तालिका संरचना (डीबी 1.dbo.Stores, DB2.dbo.OtherPlaces) के साथ संदर्भित कर सकता हूं। मुझे LINQPad का विचार बहुत पसंद है, लेकिन मैं बस कथन के उसी सेट के भीतर दो अलग-अलग डेटा संदर्भों से डेटा खींचने के लिए प्रतीत नहीं कर सकता।LINQPad, एकाधिक डेटाकॉन्टेक्स

मैंने देखा है कि लोगों ने दूसरे स्रोत से डेटा को वर्तमान स्कीमा में खींचने के लिए कनेक्शन स्ट्रिंग को बदलने का सुझाव दिया है, जैसा कि मैंने उल्लेख किया है, यह नहीं करेगा। क्या मैंने सिर्फ एफएक्यू में एक पृष्ठ छोड़ा था? यह मेरे लिए अनुपलब्ध होने के लिए एक नियमित रूप से नियमित प्रक्रिया प्रतीत होता है।

"आसान" दुनिया में, मैं बस टाइप किए गए डेटाकॉन्टेक्स्ट को संदर्भित करने में सक्षम होना चाहता हूं जो LINQPad बनाता है। तो मैं बस:

डीबी 1 डेटाटाटेक्स्ट डीबी 1 = नया डीबी 1 डेटा कॉन्टेक्स्ट();

डीबी 2 डेटाटाटेक्स्ट डीबी 2 = नया डीबी 2 डेटा कॉन्टेक्स्ट();

और वहां से काम करें।

उत्तर

5

मुझे नहीं लगता कि आप ऐसा करने में सक्षम हैं। this LinqPad request.

हालांकि, आप एक अलग डीएलएमएल फाइलों को एक अलग डीएल में बना सकते हैं और उन्हें लिंककैड में संदर्भित कर सकते हैं।

+0

अभी तक, यह मेरा निष्कर्ष भी रहा है। मैं उम्मीद कर रहा था कि मैं गलत था! बहुत धन्यवाद। –

+0

लिंक ** ** 44 पृष्ठ नहीं मिला ** त्रुटि के साथ मृत है। –

54

अद्यतन: अब LINQPad (LINQPad v4.31 से, LINQPad प्रीमियम लाइसेंस के साथ) में क्रॉस-डेटाबेस SQL ​​सर्वर क्वेरी करना संभव है। इस सुविधा का उपयोग करने के लिए, स्कीमा एक्सप्लोरर से क्वेरी विंडो पर डेटाबेस खींचते समय नियंत्रण कुंजी दबाए रखें।

यह भी जुड़ा हुआ सर्वर क्वेरी करने के लिए (sp_add_linkedserver को फोन करके यह है कि आप लिंक करने के बाद) संभव है। ऐसा करने के लिए:

  1. SQL कनेक्शन में एक नया LINQ जोड़ें।
  2. चुनें नया या मौजूदा डेटाबेस निर्दिष्ट करें और वह प्राथमिक डेटाबेस चुनें जिसे आप क्वेरी करना चाहते हैं।
  3. पर क्लिक करें अतिरिक्त डेटाबेस चेकबॉक्स शामिल करें और सूची से जुड़े सर्वर को चुनें।
+0

यह कमाल है, बिल्कुल मुझे क्या चाहिए! –

+0

"त्रुटि: अवैध ऑब्जेक्ट नाम 'sys.servers'।" –

+0

"त्रुटि: लिंक किए गए सर्वर" XXXXXXXXXX "के लिए ओएलई डीबी प्रदाता" SQLNCLI10 "में तालिका मास्टर नहीं है।" Sys "।" डेटाबेस "। तालिका या तो मौजूद नहीं है या वर्तमान उपयोगकर्ता को अनुमति नहीं है उस टेबल पर। " –

8

ध्यान रखें कि आप हमेशा अपने आप पर एक और संदर्भ बना सकते हैं।

public FooEntities GetFooContext() 
{ 
    var entityBuilder = new EntityConnectionStringBuilder   
       {   
        Provider = "Devart.Data.Oracle",   
        ProviderConnectionString = "User Id=foo;Password=foo;Data Source=Foo.World;Connect Mode=Default;Direct=false", 
        Metadata = @"D:\FooModel.csdl|D:\FooModel.ssdl|D:\FooModel.msl"  
       }; 

    return new FooEntities(entityBuilder.ToString()); 
} 
+0

में रखना अच्छा लगेगा 'FooEntities '? क्या मैं इस कोड को 'LINQPad' के अंदर लिख सकता हूं? यदि हां, तो कैसे? –

4

के रूप में आप, डेटा, आदि नोट एसक्यूएल उदाहरणों भिन्न और निष्पादित छद्म पार डेटाबेस में शामिल करना चाहते कॉपी आप के रूप में कई संदर्भों का दृष्टांत कर सकते हैं, मिलती भर संदर्भों स्थानीय स्तर पर प्रदर्शन कर रहे हैं ताकि आप ToList(), toArray (कॉल करना होगा), आदि शामिल होने से पहले व्यक्तिगत रूप से अपने संबंधित डेटा स्रोतों का उपयोग कर क्वेरी निष्पादित करने के लिए। दूसरे शब्दों में यदि आप "आंतरिक" डीबी 1.TABLE1 से 10 पंक्तियों में शामिल होते हैं तो डीबी 2.TABLE2 से 20 पंक्तियों के साथ, लिंक सेट करने से पहले दोनों सेट (सभी 30 पंक्तियां) को आपकी स्थानीय मशीन पर स्मृति में खींचा जाना चाहिए और संबंधित/अंतरण देता है सेट (प्रति उदाहरण अधिकतम 20 पंक्तियां)।

//EF6 context not selected in Linqpad Connection dropdown 
var remoteContext = new YourContext(); 
remoteContext.Database.Connection.ConnectionString = "Server=[SERVER];Database=" 
+ "[DATABASE];Trusted_Connection=false;User ID=[SQLAUTHUSERID];Password=" 
+ "[SQLAUTHPASSWORD];Encrypt=True;"; 
remoteContext.Database.Connection.Open(); 
var DB1 = new Repository(remoteContext); 

//EF6 connection to remote database 
var remote = DB1.GetAll<Table1>() 
    .Where(x=>x.Id==123) 
    //note...depending on the default Linqpad connection you may get 
    //"EntityWrapperWithoutRelationships" results for 
    //results that include a complex type. you can use a Select() projection 
    //to specify only simple type columns 
    .Select(x=>new { x.Col1, x.Col1, etc... }) 
    .Take(1) 
    .ToList().Dump(); // you must execute query by calling ToList(), ToArray(), 
       // etc before joining 


//Linq-to-SQL default connection selected in Linqpad Connection dropdown 
Table2.Where(x=>x.Id = 123) 
    .ToList() // you must execute query by calling ToList(), ToArray(), 
       // etc before joining 
    .Join(remote, a=> a.d, b=> (short?)b.Id, (a,b)=>new{b.Col1, b.Col2, a.Col1}) 
    .Dump(); 

localContext.Database.Connection.Close(); 
localContext = null; 
+0

क्या आप नीचे को स्थानीय कॉन्टेक्स्ट या रिमोट कोंटेक्स्ट को बंद और शून्य करना चाहते थे? इसके अलावा, आपका कॉन्टेक्स्ट कहां परिभाषित किया गया है? – NetMage

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