Domanda

Io sono nel processo di integrazione di una serie di sistemi legacy. Ognuno di essi ha diversi database; e ho bisogno di scrivere codice di accesso ai dati per la maggior parte di loro.

Gli schemi di database non possono essere modificati (potrei essere in grado di applicare alcuni indici e tali, ma le tabelle e le loro colonne devono mantenere la struttura). Alcune delle banche dati ha un design OK, con relationsships appropiate e le chiavi primarie / stranieri, e alcuni degli altri database manca molto.

Quali ORM sceglieresti per questo compito? Vorrei utilizzare lo stesso ORM attraversato il progetto; e le mie esigenze sono:

  • Possibilità di rinominare le tabelle o colonne in codice; ma mantenere il vecchio nome nel database.
  • la generazione di codice ragionevole
  • supporto LINQ efficiente (query LINQ contro il modello di dati dovrebbero essere tradotti in SQL efficiente).
  • classi di dati generati devono essere preferibilmente di POCO .
  • Supporto Preferibilmente per i diversi motori di database.

Al momento ho più esperienza con LINQ to SQL; ma ho la sensazione che potrebbe essere la scelta sbagliata per questo progetto. Sono disposto a investire un po 'di tempo a imparare un nuovo quadro.

È stato utile?

Soluzione

A occhio e croce, penso che un ORM potrebbe causare più problemi di quanti ne salva. Se si dispone di diversi database legacy diversi dove alcuni di loro sono mal progettati, si potrebbe trovare più facile costruire il livello di accesso ai dati a un livello inferiore rispetto un ORM. Fowler Patterns of Enterprise Application Architecture fa un buon lavoro di catalogazione diversi approcci alla strutturazione di accesso ai dati strati.

Alcuni dello strato di accesso ai dati potrebbero essere suscettibili di una soluzione generazione di codice; tuttavia la presenza di una varietà di schemi (alcuni disordinato come dici tu) suggerisce che un one-size-fits-all approccio non può funzionare, o può comportare sforzo sproporzionato per renderlo gioca bene con tutti i database legacy.

Altri suggerimenti

NHibernate sta per essere la soluzione migliore, che offre il supporto POCO, include il supporto per tutti i database che conosco, e il supporto LINQ è più che sufficiente. Sembra che si vuole generare i file di mapping, ci sono modelli là fuori per MyGeneration e CodeSmith che vi aiuterà a farlo ed evitare tonnellate di lavoro manuale. (Dopo la generazione iniziale, è facile da modificare e cambiare il nome tabelle, relazioni, e più, che è molto più difficile nella maggior parte dei quadri basati generazione)

LINQ to SQL funziona solo con SQL Server. ADO.NET Entity Framework funziona con qualsiasi database supportato da ADO.NET.

L'unica cosa che vedo sulla vostra lista che non è implementata è che le classi non sono POCO. In particolare, si tratta di una cattiva idea di esporre uno di loro in un servizio web, come i dati specifici di implementazione saranno serializzati.

NHibernate adatta alla maggior parte delle vostre esigenze. L'unica limitazione è linq; tuttavia, hanno uno sviluppatore a tempo pieno donata da uno sponsor lavorando per aggiungere un supporto per le query LINQ.

Supporta molti motori di database, è gratuito, è possibile utilizzare POCO di. Ha un sacco di ganci per rendere vari pezzi estensibile.

A mio parere, il fattore più importante è se si prevede di implementare un modello di dominio o una mappa delle tabelle direttamente agli oggetti di trasferimento dati (DTOs). Se avete intenzione di modellare il dominio, allora vi consiglio caldamente NHibernate. Se avete intenzione di lavorare con DTOS poi ci sono molti buoni candidati, tra cui Entity Framework e DataTable.

ho intenzione di indovinare si sta lavorando con C #?

Direi che forse dare SubSonic una prova, è stata una buona scelta quando il database è già in giro, soprattutto quando si tratta di procedure negozi e punti di vista. Non c'è XML per configurare come nHib e potresti essere installato e funzionante con in poche ore (o 20 minuti se si sa cosa si sta facendo). Essa ha avuto il supporto per alcuni database pure.

La parte Linq Credo Rob e Co. stanno aggiungendo a ora in modo che anche potrebbe essere in là, ma che sarebbero parte delle cose più che non ho ancora provato.

http://subsonicproject.com/

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