Domanda

Se iniziassi un nuovo progetto, cosa utilizzeresti per il tuo ORM NHibernate o LINQ e perché.Quali sono i pro ed i contro di ognuno.

modificare:LINQ to SQL non solo LINQ (grazie @Jon Limjap)

È stato utile?

Soluzione

Mi sono posto una domanda molto simile, tranne per il fatto che invece di NHibernate stavo pensando a WilsonORM che ritengo piuttosto carino.

Mi sembra che ci siano molte differenze importanti.

LINQ:

  • non è uno strumento ORM completo (puoi arrivarci con alcune librerie aggiuntive come l'ultimo framework Entity - personalmente ritengo che l'architettura di quest'ultima tecnologia di MS abbia circa 10 anni rispetto ad altri framework ORM)
  • sta principalmente interrogando il "linguaggio" che supporta IntelliSense (il compilatore controllerà la sintassi della tua query)
  • viene utilizzato principalmente con Microsoft SQL Server
  • è a sorgente chiuso

Ibernazione:

  • è lo strumento ORM
  • ha un linguaggio di interrogazione piuttosto limitato senza IntelliSense
  • può essere utilizzato con quasi tutti i DBMS per i quali si dispone di un provider DB
  • è open source

Dipende davvero.Se sviluppi un'applicazione desktop Rich (Windows) in cui devi costruire oggetti, lavorare con essi e alla fine persistere le modifiche, allora consiglierei il framework ORM come NHibernate.

Se sviluppi un'applicazione Web che di solito esegue solo query sui dati e solo occasionalmente riscrive alcuni dati nel DB, consiglierei un buon linguaggio di query come Linq.

Quindi, come sempre, dipende.:-)

Altri suggerimenti

Errr...c'è LINQ per NHibernate.

Forse quello che intendi è quale usare:

  • LINQ toSQL
  • Hibernate

Preferisco NHibernate.

LINQ to SQL è abbastanza leggero, ma è un po' più strettamente collegato alla struttura dei dati, a differenza di NHibernate che è piuttosto flessibile in termini di tipi di definizioni di oggetti che possono essere mappate alle strutture delle tabelle.

Ovviamente questo non vuol dire che LINQ to SQL non abbia usi:questo stesso sito web lo utilizza.Credo che sia abbastanza utile essere operativi in ​​piccole applicazioni in cui lo schema del database non è così massiccio.

Iniziare con Hibernate è una cattiva idea.Mostra buone prestazioni solo con impostazioni abili.Prova a utilizzare EFv4 per progetti di grandi dimensioni e L2S (forse prodotti di terze parti) per progetti di piccole e medie dimensioni.Questi prodotti sono più convenienti e flessibili di NHibernate e ti consentono di iniziare rapidamente.

non un elenco completo

Linqtosql Pro:

  • migliore supporto per gli strumenti
  • buon fornitore di Linq
  • facile iniziare quando db-schema == classi -

Contro:

  • non flessibile (cioè schema db!= classi)
  • supporta solo MS SQL Server
  • nessuna cascata (salva, aggiorna...non va in cascata agli oggetti referenziati)

Nhibernate Pro:

  • molti rdbms supportavano ootb
  • ricco di funzionalità
  • molto flessibile per quasi tutte le custodie angolari
  • fonte aperta

Contro:

  • non è così facile iniziare
  • non dalla SM
  • ci sono molti strumenti, ma devi cercarli

Tra i 2 ORM

sceglierei LinqToSql se:

  • db-schema == classi
  • utilizzare sempre e solo MS SQL Server
  • shop consente solo prodotti MS

Sceglierei Nibernate se:

  • modello di oggetti più ricco
  • schema DB legacy
  • DB diverso da MS SQL Server o supporto multiplo
  • prestazioni critiche (penso che NH abbia più funzionalità per ottimizzare le prestazioni rispetto a LinqToSql)

NOTA:questa è la mia opinione personale.Mi occupo principalmente di dbs legacy (folli) e lavori ETL complessi in cui il modello a oggetti aiuta molto su SQL.

Non uso (e nemmeno conosco) NHibernate, voglio solo dare la mia testimonianza:Utilizzo LINQ to SQL da circa 2 anni con database MySQL e PostgreSQL (utilizzando DbLinq su Windows, utilizzando Mono su Linux e Mac OS X).

Pertanto LINQ to SQL NON è limitato ai prodotti Microsoft.

Posso confermare che LINQ to SQL è molto adatto per progetti di piccole e medie dimensioni o per progetti di grandi dimensioni in cui si ha il controllo assoluto della struttura del database.Come indicano le recensioni, LINQ to SQL presenta alcune limitazioni che lo rendono uno strumento inappropriato quando non esiste una mappatura diretta tra le tabelle del database e le classi di entità.

Nota :LINQ to SQL non supporta le relazioni molti-a-molti (ma ciò può essere facilmente ottenuto con poche righe di codice).

Lo svantaggio principale di NHibernate è l'impossibilità di utilizzarlo chiamate di metodo.Non possono essere tradotti in SQL.Per aggirare ciò, devi ricreare gli alberi di espressione, cosa difficile da fare.

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