2009-03-01 13 views
13

Sto cercando un ORM che offra supporto LINQ completo o quasi completo.ORM più completo con supporto LINQ?

LINQ to SQL
- Supporta di tutto all'interno di LINQ (.Contains, Math.log, ecc)
- Can not proprietà desiderosi di rapporto di carico senza creare un nuovo DataContext

ADO.NET Entity Framework
- Supporto LINQ terribile (molte funzionalità mancanti).
- Grande mappatura dispone - Can carico ansiosi a richiesta con metodi .include su un ObjectQuery <>

LightSpeed ​​
- Grande supporto LINQ mancano alcune caratteristiche (.Contains all'interno di un caso)
- Alcuni dei SQL generato è molto inefficiente.

Nessuno di questi sembra adattarsi perfettamente, sinceramente vorrei poter prendere pezzi da ciascuno. Personalmente, ADO.NET EF mi piace molto, a parte le funzionalità mancanti che lo rendono frustrante da usare.

Conosco alcune persone che lodano NHibernate su e giù e non sto bussando ma ho passato oggi a provarlo ed è ok ma il supporto LINQ non è eccezionale.

+0

Solo curioso ... perché LINQ è così importante per l'accesso ai database? –

+0

Perché dici terribile supporto LINQ per EF? Quali caratteristiche mancano in EF4? – DamienG

risposta

0

NHibernate con LINQ to NHibernate

+0

Dai un'occhiata a questo: http://blog.dataobjects.net/2009/07/preliminary-orm-performance-comparison.html –

+0

Ciao Alex, grazie per le informazioni - anche se devo dirti, tutto quello che vedo c'è: NHibernate è abbastanza veloce per i miei scopi. ;) –

+1

I test delle prestazioni sono sempre soggettivi. Ma come ho scoperto più tardi, "il supporto LINQ quasi completo" non è quello che si può dire anche su NHibernate, e questo è molto meno soggettivo: http://ormbattle.net –

0

Ho avuto gli stessi problemi con EF. Volevo usarlo per la sua mappatura, ma ne è stato escluso a causa della mancanza di un buon supporto per linq.

Non sono sicuro cosa intendi per proprietà di relazione di carico ansioso, ma puoi caricare con piacere con linq-2-sql normale.

si utilizza LoadOptions.LoadWith<T>(expression).

+0

Giusto, ma mi piacerebbe farlo a livello di query. Potrei voler interrogare la relazione x per una query ma non un'altra. Ma non voglio creare un nuovo datacontext solo per interrogare una volta. –

0

Genome.

Genome O/RM utilizza LINQ per generare livelli di accesso ai dati che collegano sistemi di database relazionali quali Microsoft SQL Server, Oracle e IBM DB2 alle applicazioni aziendali .NET.

2

DataObjects.Net ha un supporto LINQ quasi completo.

+2

DataObjects è gravemente imperfetto. NHibernate sarebbe una soluzione molto migliore e ha un migliore supporto LINQ. – nathanchere

+1

Eventuali argomenti \ fatti \ collegamenti ai test? –

5

Prova DataObjects.NET. Sono uno degli sviluppatori di DO. E la mia ultima attività all'interno di quel progetto è implementare LINQ per DataObjects.Così ho potuto descrivere brevemente:

  • supporta quasi tutti i metodi di LINQ eccezione Ultima/LastOrDefault/ghiaia/indietro/TakeWhile/SkipWhile ecc e metodi che utilizza gli argomenti specifici .NET - come IComparer (nessuno li supporta).
  • Quasi tutti i metodi di stringa e matematica supportati (e si ha la possibilità di scrivere i propri mapping di funzioni!).
  • Scenari complessi con GroupBy \ SelectMany \ Contains \ Single \ ecc. in sottoquery e sottoquery correlate sono supportati.

Abbiamo circa 1000 test di implementazione LINQ e il 99% di essi sono passati. Quindi posso dire che l'implementazione attuale è vicina a EF. Alcuni metodi non funzionano con EF, alcuni con il nostro framework. Controllare questa breve descrizione http://www.x-tensive.com/Products/DO/.

+0

Controlla anche il nostro blog http://blog.dataobjects.net/ –

0

EntityFramework 5.0 solo rocce, anche se manca di alcune funzionalità in comaprison con NHibernate, ma per quanto riguarda LINQ sostenere la sua molto completo molto meglio di nibernetico. Nhibernate ha il concetto di SessionFactory e Session mentre entityframework ha il concetto di DbContext simile alla sessione di nhibner ma molto più facile da configurare e gestire, è possibile connettersi a molti database, tutto ciò che serve è per ogni database per definire un DbContext e creare un'istanza di SpecificDbContext per iniziare e scrivere le query LINQ sul DB specifico.

Problemi correlati