62 messaggi dal 22 ottobre 2012
Salve, ho un progetto MVC dal quale accedo a 2 database.

DB1 tramite EF 6 ( è DB principale ) ( Entity Framework )
DB2 IBM Informix ( OLE DB )

Faccio un esempio:

(EF) DB1:
TABLE Table_1 (
[IDT1] [int] NOT NULL,
[IDT2] [int] NULL,
[descr] [nchar](10) NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED

(OLE DB Informix) DB2:
TABLE Table_2 (
[IDT2] [int] NOT NULL,
[descr] [nchar](10) NULL,
CONSTRAINT [PK_Table_2] PRIMARY KEY CLUSTERED

Attualmente per accedere alle tabelle su DB2 ho creato dei repository per la tabella T2 dove tramite dei motodi "GetAll"... etc accedo alla tabella e restituisco IEnumerable<T2>.

public class T2{
public Int32 IDT2{ get; set; }
public string descr { get; set; }
}

public class T2Repository : IT2Repository
{
public IEnumerable<T2> GetAll()
{
var ta = new DB2DataSetTableAdapters.T2TableAdapter();
var ds = new DB2DataSet();
ta.Fill(ds.T2);

List<T2> list = null;

if (ds.T2.Count != 0)
{
list = new List<T2>();

foreach (DB2DataSet.T2Row tr in ds.T2.Rows)
{
var item = new T2();
item.IDT2 = tr.IDT2;
item.descr = tr.descr;

list.Add(item);
}
}

ta.Dispose();
ds.Dispose();

return list;
}

Mentre per il DB1 accedi tramite dbcontext ....

Come posso fare per create tramite LINQ SQL dalle entity delle join utilizzando la tabella T2, tipo:

select T1.*,T2.* FROM T1 INNER JOIN T2 ON T1.IDT1=T2.IDT2

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
per fare una JOIN in linguaggio SQL è necessario che il db Informix sia stato configurato nella tua istanza di SQL Server come "linked server". Personalmente non ho mai provato ma leggi questo articolo per capire come configuralo.
http://www.marcopipino.it/sql/openquery.php

Se invece vuoi fare una JOIN con Linq to Entities, penso che tu debba avere tutti i dati su Sql Server, quindi dovrai preparare un job in background che, periodicamente, riversi tutte le righe che si trovano su Informix in una tabella Sql Server che abbia uno schema equivalente.

L'ultima opzione consiste nel fare una Join in memoria. In pratica, ottieni la lista di entità con EF dal db Sql Server. Poi ottieni anche gli oggetti da Informix usando ADO.NET. Infine fai una join tra i due elenchi usando l'extension method Join di IEnumerable.
https://msdn.microsoft.com/it-it/library/bb534675(v=vs.110).aspx

ciao,
Moreno
Modificato da BrightSoul il 02 marzo 2017 07.31 -

Enjoy learning and just keep making
62 messaggi dal 22 ottobre 2012
Grazie.

La soluzione con i Linked Server è quella che stò utilizzando, ma purtroppo le prestazioni non sono proprio il massimo.
Ho provato anche la seconda ( ho creato dei job di ETL tramite Talend ETL ) ma fino a quando si parta di anagrafiche dove la modifica non è cosi frequente ed i dati non sono molti va anche bene.

Volevo appunto provare la terza soluzione, ma per ottimizzare la query volevo capire con quali selezioni eseguire la query sulla lookup in modo da non selezionare record che non mi interessano.
Penso che prima devo fare una selezione dal contesto dei record che mi interessano, in funzione di questi eseguire la seconda selezione... e poi i memoria la join con LINQ.

Ciao e Grazie, sei sempre molto disponibile.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Penso che prima devo fare una selezione dal contesto dei record che mi interessano, in funzione di questi eseguire la seconda selezione... e poi i memoria la join con LINQ.

Sì, esatto. Creati un elenco degli ID da cercare nel secondo database e poi fai una query del tipo: SELECT campi FROM tabella WHERE campoId IN (elencoDegliId).
Verifica però se le prestazioni sono superiori al farlo con il linked server.


fino a quando si parta di anagrafiche dove la modifica non è cosi frequente ed i dati non sono molti va anche bene.

Beh, potresti scriverti una piccola applicazione che fa un polling frequente per capire cosa è stato aggiornato e che trasferisca solo le modifiche.
Però non sempre è possibile, perché determinare i cambiamenti pià essere complicato se manca una colonna timestamp o un trigger che ti avvisa dell'evento di modifica.

ciao,
Moreno
Modificato da BrightSoul il 04 marzo 2017 15.27 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.