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.