Domanda

Gli sviluppatori di prodotti Molti vogliono scrivere un'applicazione .NET che funziona perfettamente con qualsiasi RDBMS popolari come SQL Server, Oracle, DB2, MySql. Se usiamo il blocco applicativo dati raccoglie dinamicamente il driver di database (OracleClient, SQLClient o OleDbClient) in base alla configurazione.

Tuttavia, tutte le banche dati hanno i loro sapori di SQL. Ci sono sottili differenze che impediscono una base di codice SQL per essere utilizzato universalmente - i nomi delle funzioni sono diversi, le date modo in cui vengono gestiti sono diverse, le colonne Identity modo trattati sono diversi e così via

.

Si potrebbe utilizzare un prodotto di terze parti da dati diretto di scrivere codice neutro DB usando sequenze di escape predefinite.

Ci sono strumenti o prodotti da Microsoft che risolve questo problema?

È stato utile?

Soluzione

Il Microsoft ADO.NET Entity Framework è un Object-Relational Mapping quadro da Microsoft, che è progettato per consentire di scrivere codice che è (un po ') DB-agnostico. Tutti i principali DBMS hanno il supporto per Entity Framework, anche se per molti (ad esempio MySQL, Postgres) avrete bisogno di scaricare qualcosa di separato dal .NET Framework installazione.

Nota: devo ancora lavorare su un unico grande progetto che utilizza un O / RM strumento dove non c'era almeno un caso in cui abbiamo dovuto sborsare per SQL-- nativo sia per la funzionalità DB-specifica o per le prestazioni motivi (necessari per scrivere una domanda in 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 altri dimensions-- O quadri / RM come NHibernate , SubSonic , ecc, sono molto più maturo, in cui "maturo "significa supportare una gamma più profonda di funzionalità DBMS senza dover sborsare a SQL nativo, il sostegno della comunità più ampia, migliori prestazioni, ecc

Questo è il mio modo educato per dire che, per un mondo reale, progetto relativamente complesso, non credo che l'attuale versione di Entity Framework è il modo migliore per andare in relazione agli altri strumenti di O / RM disponibili .

A quanto pare, la prossima .NET 4.0 / VS2010 versione di Microsoft Entity Framework è molto migliorata, così la dichiarazione di cui sopra, non può essere vero l'anno prossimo. Il nuovo Entity Framework aggiunge il supporto per DDL, per esempio, in modo da poter creare tabelle e indici in modo DBMS indipendente. Inoltre, il NET 4.0 Entity Framework sta sfruttando una caratteristica fredda chiamata T4 Modelli , che è una funzione che, per auto-generare il codice in fase di compilazione, il che è importante per le cose come involucri O / RM che devono essere tenuti in sincronia con uno schema-- DB esterno e che dovrebbe produrre una migliore performance (aka pre-compilato) che fare strumenti O / RM che non conoscono i tipi di colonne del database fino a runtime.

Altri suggerimenti

Per quanto ho capito siete alla ricerca di strumenti per la scrittura di SQL RDBMS-indipendenti, ma non un ORM. Questo è problema molto reale risolto da diversi fornitori ORM in modi diversi. Posso solo citare Xtensive SQL DOM strumento, che è stato sviluppato per la loro ORM - DataObjects.Net . Si tratta di un'astrazione su SQL che consente di scrivere query utilizzando tutte le funzionalità del modello DOM. In questo momento di SQL DOM non è promossa separatamente dal DataObjects.Net, ma è un prodotto open source e che sicuramente può chiedere ai suoi autori su di esso. Per quanto ne so, è utilizzato con successo in alcuni progetti di terze parti.

Non direttamente da Microsoft. Questi strumenti sono comunemente chiamati Object-Relational Mapper o breve ORM. NHibernate, per esempio, è un ORM comune e largamente utilizzato, che è molto sicuro di soddisfare le vostre esigenze. Naturalmente ci sono altri prodotti commerciali come Telerik OpenAccess ORM, DevExpress XPO o RemObjects DataAbstract che vi aiuteranno ad essere di database agnostico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top