2009-11-08 18 views
5

Molti sviluppatori di prodotti desiderano scrivere un'applicazione .NET che funzioni perfettamente con qualsiasi RDBMS popolare come SQL server, oracle, DB2, MySql. Se utilizziamo il blocco dell'applicazione Dati, esso preleva in modo dinamico il driver del database (OracleClient, SQLClient o OleDBClient) in base alla configurazione.Database neutral .NET application

Tuttavia, tutti i database hanno le proprie versioni SQL. Esistono sottili differenze che impediscono l'uso universale di una base di codice SQL: i nomi delle funzioni sono diversi, il modo in cui le date vengono gestite sono diverse, il modo in cui le colonne di identità gestite sono diverse e così via.

È possibile utilizzare un prodotto di terze parti di Data Direct per scrivere codice neutro DB utilizzando sequenze di escape predefinite.

Esistono strumenti o prodotti Microsoft che risolvono questo problema?

risposta

12

Il Microsoft ADO.NET Entity Framework è un framework Object-Relational Mapping di Microsoft progettato per consentire all'utente di scrivere codice che è (in qualche modo) DB-agnostico. Tutti i principali DBMS supportano Entity Framework, sebbene per molti (ad esempio MySQL, Postgres) sia necessario scaricare qualcosa di separato dall'installazione di .NET Framework.

Nota: Devo ancora lavorare su un singolo progetto di grandi dimensioni utilizzando uno strumento O/RM in cui non c'era almeno un caso in cui abbiamo dovuto eseguire il shelling in SQL nativo, sia per funzionalità specifiche del DB che per motivi di prestazioni (necessari per scrivere una query in un modo particolare per ottenere un buon piano di query). Ma un buon O/RM può funzionare la maggior parte del tempo per evitare di dover scrivere SQL.

Detto questo, la versione corrente di Entity Framework è piuttosto limitata in un certo numero di dimensioni - altri framework O/RM come NHibernate, SubSonic, ecc. Sono molto più maturi, dove "maturo" significa supportare una gamma più ampia delle funzionalità di DBMS senza dover eseguire il shelling in SQL nativo, supporto di comunità più ampio, prestazioni migliori, ecc.

Questo è il mio modo educato per dire che, per un progetto del mondo reale, relativamente complesso, non penso che la versione corrente di Entity Framework è il modo migliore per andare rispetto agli altri strumenti O/RM disponibili.

A quanto pare, il prossimo .NET 4.0/VS2010 version of the Microsoft Entity Framework è molto migliorato, quindi la dichiarazione di cui sopra potrebbe non essere vera l'anno prossimo. Il nuovo Entity Framework aggiunge il supporto per DDL, ad esempio, quindi è possibile creare tabelle e indici in modo indipendente da DBMS. Inoltre, .NET 4.0 Entity Framework sfrutta una interessante funzionalità denominata T4 Templates, che è una funzione utile per generare automaticamente il codice in fase di compilazione, importante per cose come i wrapper O/RM che devono essere mantenuti sincronizzati con un esterno Schema DB - che dovrebbe fornire prestazioni migliori (anche precompilate) rispetto agli strumenti O/RM che non conoscono i tipi di colonne del database fino al runtime.

+0

+1 Una risposta buona e completa. Può valere la pena notare che attualmente l'EF supporta solo RDBMS. Questo è ciò che l'OP ha chiesto, quindi non ho problemi con la tua risposta, ma voglio solo sottolineare che EF non ti aiuterà se hai improvvisamente bisogno di accedere ai dati attraverso un servizio RESTful, o altro non relazionale Origine dei dati. –

+0

EntityFramework non funziona con Informix (il database di Satan) –

1

Non direttamente da Microsoft. Questi strumenti sono comunemente chiamati Object-Relational Mappers o short ORM. NHibernate, ad esempio, è un ORM comune e ampiamente utilizzato che è molto adatto alle tue esigenze. Ovviamente ci sono altri prodotti commerciali come Telerik OpenAccess ORM, DevExpress XPO o RemObjects DataAbstract che ti aiuteranno ad essere indipendenti dal database.

+0

C'è * un * ORM direttamente da MS: Entity Framework. –

+0

Un altro aspetto degli ORM non è solo l'SQL "standard" che è possibile utilizzare, ma anche l'enorme quantità di codice boilerplate che è possibile salvare (transazione e gestione LOB, per citare solo due cose che vengono in mente). – davek

2

Come ho capito, stai cercando uno strumento per scrivere SQL indipendente da RDBMS, ma non un ORM. Questo è un problema molto reale risolto da diversi rivenditori ORM in modi diversi. Posso solo menzionare lo strumento XtensiveSQL DOM, che è stato sviluppato per il loro ORM - DataObjects.Net. È un'astrazione su SQL che consente di scrivere query utilizzando il modello DOM completo. In questo momento SQL DOM non viene promosso separatamente da DataObjects.Net, ma è un prodotto open source e puoi sicuramente chiederlo ai suoi autori.Per quanto ne so, è usato con successo in alcuni progetti di terze parti.

Problemi correlati