Ebbene si, non tutto il mondo si è piegato al potere dell’Anello e resistono molte realtà dove solo pronunciare il nome Microsoft è proibito. Purtroppo mi è capitato uno di questi casi dove i database sono rigorosamente Oracle. Ma sull’applicazione c’era un “certo” grado di libertà e quindi ho cominciato a valutare le varie possibilità di interrogazione del DB. Alla fine mi sono concentrato su Entity Framework (l’avevo usato con successo su SQL Server e quindi perchè privarmene ?). Premetto subito che la situazione non è così buona e fortunata come su SQL Server ma se si è disposti a perdere qualcosa ci sono delle soluzioni. Intanto Oracle stessa non fornisce nessun EF per il suo DB.
Pietro aveva scritto un articolo su ADO.NET Data provider per Entity Framework in cui citava Devart come prodotto di terze parti. Ho provato la Beta ma non mi ha entusiasmato.
Cercando in giro sono arrivato sul sito MSDN code gallery dove compare l’esempio di un Sample Entity Framework Provider for Oracle completo di sorgente. Funziona con Oracle 10g ed è basato sulle API System.Data.OracleClient. Ci sono pero’ dei limiti:
- i tipi BINARY_FLOAT, BINARY_DOUBLE e TIMESTAMP non sono supportati
- manca il provider DDEX e quindi tutto il supporto visuale integrato in Visual Studio (si puo’ solo vedere lo schema nell’EDM Designer)
- l’operatore APPLY non è supportato da Oracle e quindi le query del tipo "Average - Grouping 1", "Max - Grouping", "Min - Grouping" non funzionano.
Alcuni tipi di Oracle sono mappati in quelli .NET secondo lo schema:
- EFOracle.number(1,0) mappato con Boolean
- EFOracle.number(5,0) mappato con Int16
- EFOracle.number(11,0) mappato con Int32
- EFOracle.raw(16) mappato con Guid
Mancando il supporto visuale bisogna generare il file edmx a mano tramite il tool edmgen2 come spiegato da Kowalski nell’articolo : Using EF Oracle Sample Provider with EDM Designer
Lo sto provando in un progetto importante e devo dire che mi sembra funzionare bene, però non ho bisogno di fare cose troppo complicate. Se qualcun altro altro lo avesse provato mi piacerebbe conoscerne le impressioni.