Quali caratteristiche specifiche di NHibernate sono consigliate per i sistemi di database legacy?

4

Quindi, sto valutando Entity Framework e NHibernate (non sto cercando una battaglia contro EF contro NH qui, però!).

Una cosa che vedo molto spesso è che NHibernate è raccomandato per i progetti di database "legacy" / brownfield, e le ORM più leggere (Dapper, ecc.) sono a volte raccomandate per i nuovi db.

Applicherò il mio ORM a un database brownfield. Quali caratteristiche specifiche di NHibernate lo rendono così ampiamente raccomandato per dbs "legacy". (Non ho mai sentito nessuno dire "ecco perché NHibernate è migliore per i legacy DB - Voglio davvero saperlo, così posso valutare NHibernate in modo appropriato)

E a proposito, qual è la definizione di legacy qui? Le persone significano

  • "database non ben normalizzati"?
    (O)
  • "database a cui si accede tramite mezzi non ORM, come query SQL o processi memorizzati? (O)
  • non parla affatto del database, ma si riferisce ai classici sistemi di videosorveglianza a 2 livelli (o alle applicazioni web a 2 livelli, dove c'è stato di sessione spessa e nessun livello di applicazione)?
    (O)
  • Qualsiasi database che non è un database noSQL?

Se è di qualche utilità la discussione. Userò questo ORM per creare software distribuito e multilivello. Quindi penso che molte delle funzionalità stateful in ORM - come il rilevamento delle modifiche, ecc. Non mi riguarderanno molto.

    
posta JMarsch 22.06.2013 - 20:30
fonte

1 risposta

1

Non ho familiarità con EF, quindi è possibile che ciò che sto per menzionare esista anche in EF.

Sto lavorando con Priority ERP, che ha un database legacy. Che cosa significa legacy in questo caso?

  • Nessuna chiave esterna
  • A volte essere costretti a creare sia una chiave primaria numerica di sequenza sia una chiave univoca a causa di ERP di priorità
  • Nomi di tabelle e campi limitati a soli 20 caratteri maiuscoli
  • Numeri mobili falsi (campi memorizza 10500 int, valore effettivo 10.500)
  • I booleani sono memorizzati come un campo varchar di un carattere, dove "Y" è vero, e qualsiasi altra cosa è falsa (e intendo qualsiasi altra cosa, alcune procedure ERP prioritarie utilizzano una stringa vuota, una "N")
  • Le date e i tempi vengono memorizzati come numero di minuti dall'1-1-1988 (solo minuti, nessuna possibilità di memorizzare secondi)
  • Avendo a che fare con tabelle precostruite che sono state costruite negli anni '80 ea causa di nessuna chiave esterna la relazione tra le tabelle è scomoda per non dire
  • Alcune tabelle hanno FIELD1 ... FIELD10 per riga anziché una tabella di join, il che rende impossibile eseguire query normali sulla tabella.
  • Nessun valore nullo consentito in nessun campo
  • Ogni tabella, anche con zero dati, ha una riga vuota piena di valori predefiniti che viene utilizzata come sostituzione per il join esterno a causa dell'impostazione di nulls.

NHibernate plus ActiveRecord mi consente di supportare tutte queste limitazioni abbastanza facilmente:

  • Punti di estensione incorporati durante la gestione delle operazioni CRUD
  • Possibilità di mappare i contenuti dei campi effettivi su un campo e convertirli avanti e indietro con una proprietà
  • Mi consente di definire quasi tutte le associazioni tra entità
  • Creazione di una query personalizzata con HQL per fare esattamente ciò di cui ho bisogno, anche se non riesco a mappare le relazioni tra le entità
risposta data 23.06.2013 - 10:46
fonte

Leggi altre domande sui tag