2009-03-01 14 views
13

Estoy buscando un ORM que ofrezca soporte LINQ completo o casi completo.ORM más completo con soporte LINQ?

LINQ a SQL
- Soporta sobre todo dentro de LINQ (.Contains, Math.log, etc)
- No se puede propiedades de relación de carga ansiosos sin crear un nuevo DataContext

ADO.NET Entity Framework
- Soporte terrible de LINQ (muchas características faltantes).
- Gran mapeo cuenta - se puede cargar con ganas a la carta con los métodos .include en una
ObjectQuery <>

LightSpeed ​​- Gran apoyo LINQ faltan algunas características (.Contains dentro de un caso)
- Algunos de los SQL generado es muy ineficiente.

Ninguno de estos parece encajar perfectamente, sinceramente me gustaría poder tomar partes de cada uno. Personalmente, me gusta mucho ADO.NET EF, excepto que las funciones que falta hacen que sea frustrante de usar.

Sé que algunas personas alaban a NHibernate hacia arriba y hacia abajo y no lo estoy golpeando, pero hoy lo he intentado y está bien, pero el soporte de LINQ no es tan bueno.

+0

Sólo por curiosidad ... ¿por qué es tan importante para LINQ que acceder a las bases de datos? –

+0

¿Por qué dices un terrible soporte de LINQ para EF? ¿Qué características faltan en EF4? – DamienG

Respuesta

0

NHibernate con LINQ to NHibernate

+0

Salida esto: http://blog.dataobjects.net/2009/07/preliminary-orm-performance-comparison.html –

+0

Hola Alex, gracias por la info - aunque tengo que decir que, todo lo que veo no es: NHibernate es lo suficientemente rápido para mis propósitos. ;) –

+1

Las pruebas de rendimiento siempre son subjetivas. Pero como descubrí más tarde, "soporte LINQ casi completo" no es lo que se puede decir sobre NHibernate también, y esto es mucho menos subjetivo: http://ormbattle.net –

0

Tuve los mismos problemas con EF. Quería usarlo para su mapeo, pero me retiré debido a la falta de un buen soporte de linq.

No estoy seguro de lo que quiere decir con ansiosas propiedades de relación de carga, pero puede cargar ansiosamente con plain linq-2-sql.

Se utilizan LoadOptions.LoadWith<T>(expression).

+0

Correcto, pero me gustaría hacerlo en un nivel de consulta. Es posible que desee consultar la relación x para una consulta, pero no para otra. Pero no quiero tener que crear un nuevo contexto de datos solo para consultar una vez. –

0

Genome.

Genome O/RM utiliza LINQ para generar capas de acceso a datos que conectan sistemas de bases de datos relacionales como Microsoft SQL Server, Oracle e IBM DB2 a sus aplicaciones empresariales .NET.

2

DataObjects.Net tiene soporte LINQ casi completo.

+2

DataObjects es muy defectuoso. NHibernate sería una solución mucho mejor y tiene mejor soporte LINQ. – nathanchere

+1

¿Algún argumento \ facts \ links to tests? –

5

Pruebe DataObjects.NET. Soy uno de los desarrolladores de DO. Y mi última actividad dentro de ese proyecto es implementar LINQ para DataObjects.Así que podría describir brevemente:

  • es compatible con casi todos los métodos de LINQ, excepto Última/LastOrDefault/Gravilla/atrás/TakeWhile/SkipWhile etc., y métodos que tiene argumentos específicos .NET - como IComparer (nadie los apoya).
  • Casi todos cadenas y técnicas matemáticas apoyado (y usted tiene la capacidad de escribir sus propias asignaciones de función!).
  • escenarios complejos con GroupBy \ SelectMany \ Contiene \ Individual \ etc. en subconsultas y subconsultas correlacionadas son compatibles.

Tenemos alrededor de 1000 pruebas de implementación de LINQ y el 99% de ellas se aprueban. Entonces puedo decir que la implementación actual es cercana a EF. Algunos métodos no funcionan con EF, algunos con nuestro marco. Consulte esta breve descripción http://www.x-tensive.com/Products/DO/.

+0

Consulte también nuestro blog http://blog.dataobjects.net/ –

0

ADO.NET Entity Framework 5.0 sólo rocas, aunque carece de algunas características en comaprison con NHibernate, pero en relación con LINQ apoyan su muy completo mucho mejor que nhibernate. Nhibernate tiene el concepto de SessionFactory y Session mientras que ADO.NET Entity Framework tiene el concepto de DbContext su similar a la sesión de NHibernate pero mucho más fácil de configurar y administrar, puede conectarse a muchas bases de datos, todo lo que necesita es que cada base de datos para definir un DbContext y crear una instancia del SpecificDbContext para comenzar y escribir las consultas LINQ contra el DB específico.

Cuestiones relacionadas