NHibernate - Panoramica

In questo capitolo discuteremo di cos'è NHibernate, di quali piattaforme può essere implementato, quali sono i suoi vantaggi e altri aspetti ad esso correlati.

Cos'è NHibernate?

NHibernate è un mappatore relazionale di oggetti open source maturo per il framework .NET. È attivamente sviluppato, completamente caratterizzato e utilizzato in migliaia di progetti di successo. È costruito sopraADO.NET e la versione attuale è NHibernate 4.0.4.

  • NHibernate è un mappatore relazionale a oggetti .NET open source ed è distribuito con estensione GNU Lesser General Public License.

  • È basato su Hibernate, un popolare mappatore relazionale a oggetti Java e ha una base di codice molto matura e attiva.

  • Fornisce un framework per mappare un modello di dominio orientato agli oggetti a un database relazionale tradizionale.

  • NHibernate è stato avviato da Tom Barrett e questo progetto esiste dal febbraio 2003, che è stato il loro primo impegno.

  • È un grande progetto e offre molte funzionalità.

  • C'è un NuGet package disponibile, il che lo rende molto facile da aggiungere a un progetto.

Perché NHibernate?

Ora la domanda è: perché ne abbiamo bisogno object-relational mappers? È perché c'è una disconnessione tra il mondo degli oggetti e il mondo relazionale.

  • Nel mondo degli oggetti, tutto è basato su objects; abbiamo chiamato oggetti quelle cose che hanno i nostri dati.

  • Il mondo relazionale è tutto basato su set e abbiamo a che fare con tabelle e righe diverse dal mondo degli oggetti.

  • Nel mondo degli oggetti, abbiamo unidirectional associations. Se un cliente ha un puntatore a un ordine, non significa necessariamente che un ordine abbia un puntatore a un cliente, potrebbe o no.

  • Nel mondo relazionale, tutte le associazioni lo sono bidirectional e può essere fatto da una chiave esterna.

  • Tutte le associazioni sono intrinsecamente bidirezionali, quindi quando abbiamo a che fare con la mappatura relazionale degli oggetti, dobbiamo anche affrontare questa disconnessione.

  • Nel mondo degli oggetti, lavoriamo con puntatori unidirezionali, mentre nel mondo relazionale abbiamo chiavi esterne che sono intrinsecamente bidirezionali.

  • Il mondo degli oggetti ha questa nozione di eredità, in cui un veicolo può avere un numero di sottoclassi diverse, quindi un'auto è un tipo di veicolo, una barca è un tipo di veicolo e un'auto sportiva è un tipo di auto, questi tipi di rapporti di eredità.

  • Il mondo relazionale non ha questa nozione di eredità.

Mappatura

Allora come mappiamo tutti questi disjoint relationships?Questo concetto di mappatura deriva dal mappatore relazionale a oggetti. Ci sono principalmente tre cose da capire, come mostrato nel diagramma seguente.

  • Nella tua applicazione, avrai bisogno delle definizioni di classe, che in genere è codice C # e il suo codice .NET che rappresenta le nostre classi, come classe Employee, classe Customer, classe Order, ecc.

  • In basso, puoi vedere uno schema del database, che è il nostro Data Definition Language in un database relazionale che specifica l'aspetto di una tabella dei clienti, l'aspetto di una tabella dei dipendenti.

  • In mezzo a questi abbiamo i metadati di mappatura che indicano al mappatore relazionale dell'oggetto come tradurre dal mondo degli oggetti in C # al mondo del database in termini di righe e colonne e relazioni di chiavi esterne.

  • Questi metadati di mappatura possono essere rappresentati in una varietà di modi diversi e vedremo molti di questi modi diversi, più tipici nell'applicazione NHibernate.

  • È rappresentato da HBM (Hibernate Mapping) file, che sono file XML.

Database supportato

NHibernate supporta un'ampia varietà di database differenti. È possibile accedere a NHibernate a qualsiasi database relazionale esistente.

  • SQL Server è il database primario supportato, è quello che la maggior parte degli sviluppatori utilizza durante lo sviluppo, è probabilmente il più comune.

  • Anche works very well with Oracle.

  • Supporta anche DB2, Firebird, MySQL, PostgreSQL, SQL Lite

  • Ha anche ODBC and OLEDB drivers.