MySQL ve SQL Server tabloları katılın ve ben bu veritabanlarının ikisinden de bilgiye ihtiyacım var. Veritabanlarından biri bir MySql sunucusunda yaşıyor ve diğeri MS SQL Server'da yaşıyor. Neden tamamen farklı iki sunucu üzerinde yaşayan ilgili verilerimiz olduğunu sorma, uzun bir hikaye. üst düzey bir bakış açısıyla LINQ: İki tamamen ayrı veritabanları üzerinde yaşayan veriler ilgili olan
, ben SQLServerTableB için, bazı karmaşık kısıtlamalar yapmak ve muhtemelen bazı gruplandırma ölçütleri ve sayıları yapmak MySqlTableA katılması gerekir. bu iki veritabanları arasında katılmadan oldukça kolay hale getirmek için bir yol bulmaya çalışıyorum. LINQ'un sorunlarımı çözebileceğini düşündüm, ancak bildiğim kadarıyla hem MySQL hem de SQL Server kaynaklarına sahip tek bir bağlam oluşturamıyorum. Bir MySql bağlamını oluşturmak için Devart en LinqConnect kullanarak - - Ben farklı bağlamlarda iki kaynağı koyabilirsiniz ama LINQ geçici içeriği katılır izin vermez.Yani benim seçenekler nelerdir: (Simulating Cross Context Joins--LINQ/C# Ben yöntemi burada açıklanan çalıştı, ama işe yaramadı)? verimli (Aksi LINQ gerçi ya) bu iki farklı veritabanı sunucularında tabloları birleştirmek için bir yol var mı, yoksa döngü var ve elle veri katılmak için gidiyorum?
DÜZENLEME: belirtildiği gibi
, zaten AsQueryable() geçici çözümü denedim, ama yine de bir çapraz bağlam istisna olsun. İşte benim kodudur:
public static MySqlDataContext mysql = new MySqlDataContext();
public static SQLDataContext sql = new SQLDataContext();
public static void Main() {
var rows = from a in mysql.tableA
join b in GetTableBs() on a.col equals b.col
select a;
//exception gets thrown when rows is enumerated.
//InvalidOperationException: "The query contains references to items defined on a different data context."
foreach(var row in rows) {
...
}
}
public static IEnumerable<TableB> {
return sql.TableBs.AsQueryable();
}
Denediğim kodu göstermek için soruma bir düzenleme ekledim, sizinkilere çok benziyor. Korkarım ki, size örnek bir proje gönderemem çünkü hassas bilgiler içerecektir. Ancak, yukarıda eklediğim kod örneği ne yaptığımı açıklığa kavuşturmalı. – ean5533
@ ean5533, Cevabı güncelledim. – Devart
Ah ha, işte başlıyoruz. Hafızada birleştirme yapmak için bir çeşit yolun olması gerektiğini biliyordum. .ToList() işlevinin bana hala bir LINQ tablosu gibi davranılabilen bir nesne verebileceğini anlayamadım. Bu bana ihtiyacım olanı veriyor, teşekkürler. – ean5533