2009-02-15 19 views
7

Estoy un poco avergonzado de decir que nunca he usado un ORM; como recordarán, la mayor parte de mi experiencia profesional es piratear con Classic ASP y el pequeño .NET que hago tiende a ser solo de mantenimiento.Algunas sugerencias sobre qué .NET ORM para ver el aprendizaje

Para mi propia carrera, así como en la preparación de un nuevo proyecto en el trabajo (¡hecho finalmente en .NET!) Estoy buscando agregar un ORM a mi conjunto de habilidades: ser el masoquista que soy también lo voy a hacer mira TDD mientras estoy en esto para este proyecto.

De todos modos, estoy usando .NET 3.5 para el proyecto (o pienso hacerlo, de todos modos), así que estoy tratando de decidir qué ORM quiero elegir; como dije, no estoy realmente familiarizado con ellos, pero sé en general lo que se supone que deben hacer y cómo lo hacen. Mis elecciones se basan básicamente en NHibernate o LINQ/Entity Framework. No he usado ninguno, pero he visto algunas demostraciones de LINQ2SQL y de NHibernate.

Parece que NHibernate es más robusto en general (Linq2Sql ni siquiera es un "verdadero" ORM), así como muy utilizado en la comunidad ALT.NET, que quiero explorar más. Sin embargo, EF es la oferta de Microsoft y, como tal, será utilizada ampliamente por la mayoría de los equipos de desarrollo que usan lo que sea que Microsoft saque y no buscan ninguna alternativa.

He oído cosas buenas y malas sobre EF, pero quiero elegir algo que me brinde una buena base y que se vea bien para otros empleadores si/cuando encuentro un mejor trabajo en una empresa con una equipo de desarrollo real.

EDIT: Debo agregar que, si es importante para elegir un ORM, la aplicación tendrá que tratar con una base de datos existente.

EDITAR (15/02/2009 18:48): La única base de datos que usará es SQL Server 2005 Standard, ejecutándose en Windows Server 2003. Dado que esto es para un proyecto para el trabajo, mi objetivo es para elegir algo que no me tome mucho tiempo para ponerme al día (ya que voy a necesitar ser productivo y "Aprender una nueva herramienta" no se verá bien para administrarlo) pero algo que será mejor que lanzar mi propio DAL. En ese momento no he decidido si la aplicación será un cliente inteligente o una aplicación ASP.NET, pero una parte de ella probablemente se hará con ASP.NET MVC.

Respuesta

13

Recomendaría nhibernate - ya que es de código abierto y tiene una ayuda comunitaria muy activa es fácil de conseguir. Un gran punto de partida es The NHibernate FAQ, que va desde la publicación para principiantes hasta conceptos muy avanzados. Comienza a correr leyendo y siguiendo Prepare your system for NHibernate y Your first NHibernate based application.

Todos los empleadores para los que trabajé utilizaron NHibernate para ORM en .NET e Hibernate para ORM en Java, por lo que debería beneficiarse mucho de aprender NHibernate.

1

Dado que está utilizando .NET 3.5, recomiendo LINQ.
LINQ solo requiere que se implementen las interfaces IEnumerable y IQueryable.
Eso significa que no está limitado a datos relacionales.
Alse ver el artículo ORM in .NET 3.5

2

muchas discusiones sobre este tema en desbordamiento de pila:

What object mapper solution would you recommend for .net?

What is the best data access paradigm for scalability?

Persistence framework?

Tanto EF y Nhibernate se consideran útiles para grandes proyectos. Algunas de las principales preocupaciones expresadas sobre EF son la falta de ignorancia de la carga lenta/persistencia. Nhibernate tiene una curva de aprendizaje más pronunciada y requiere más configuración manual.

1

Para la ruta libre y de código abierto, NHibernate es bastante difícil de superar. Es un ORM maduro con una comunidad muy activa y con mucho apoyo. Hay una curva de aprendizaje inicial allí con NHibernate, sin embargo, creo que vale la pena el esfuerzo que podría invertir en él.

Si desea permanecer dentro del mundo .NET de Micrsoft, LINQ es una gran tecnología para aprender, y no solo LINQ2SQL (que como usted dice, no es un ORM completo de todos modos) ya que LINQ se puede aplicar a los objetos , XML y básicamente cualquier cosa que sea IEnumerable/IQueryable.

Para el futuro, recomendaría Entity Framework (una vez más, en el mundo de Microsoft). Hubo unos pocos scary sounding announcements del equipo LINQ2SQL dentro de Microsoft que parecen sugerir que todos los esfuerzos futuros de desarrollo se incluirán en Entity Framework en lugar de LINQ2SQL. Hay una cierta cantidad de superposición de esas tecnologías de todos modos. Ciertamente, no creo que LINQ (hablando en general) vaya a desaparecer en el corto plazo, pero tendría cuidado de invertir para el término largo en LINQ2SQL. Entity Framework es aún relativamente nuevo y está en desarrollo activo, por lo que esperamos ver que EF madure en los próximos meses/años.

Así que, en este momento, LINQ2SQL es excelente y puedes ponerlo en marcha rápidamente sin necesidad de sumergirte en el funcionamiento interno (es decir, árboles de expresión, etc.) pero para el futuro, yo ' recomendaría Entity Framework/NHibernate ya que creo que estos dos ORM serán los de mayor uso en los próximos años por la mayoría de los equipos de desarrollo de .NET.

Por supuesto, dicho esto, existen innumerables soluciones ORM diferentes, y dudo que ninguna de ellas sea una solución única para todos, por lo que realmente tiene que examinar cada una de ellas y vea cuál es el más adecuado para el proyecto específico en el que está trabajando.

2

¿Por qué limitarse a solo una mientras aprende? ¿Por qué no jugar con todos ellos y ver cuáles se sienten mejor para ti? Entonces puede comenzar una inmersión profunda en esas tecnologías y sacar más provecho de ellas.

Personalmente, comenzaría con LINQ to SQL porque es muy fácil. Juega con él solo para acostumbrarte a la idea de cómo se puede usar un ORM. Te sorprenderá lo simple que es y lo fácil que es comenzar, y probablemente te encuentres con muchos de los puntos débiles que llevan a algunas personas a Entity Framework.

Una vez que utilice Entity Framework un poco, o bien se sentirá satisfecho con él o se preguntará cuál es el problema con nHibernate y algunos de los otros mencionados en las preguntas relacionadas.

Es en ese punto, en mi opinión, que estarás más preparado para tener éxito con algo como nHibernate, que puede ser difícil de aprender como una primera incursión en ORM-land.

De cualquier manera, no prescribo a la escuela de pensamiento "¿qué debo intentar?". Pruébalos a todos, digo.

2

Yo diría que vaya con NHibernate. Es ampliamente utilizado, tiene una serie de tutoriales y recursos de aprendizaje y un grupo contrib activo. Es similar a Hibernate, lo que significa que cualquier habilidad que aprenda en .NET NHibernate es portátil para Java. Ganar-ganar-ganar-etc. :)

4

SubSonic de Rob Connery es un ORM "Swiss Army knife" basado en ActiveRecord. Puedes ser productivo con eso en 30 minutos. Tenga cuidado, NO está en el nivel de NHibernate en términos de opciones de configuración, etc. Es muy productivo y el código es muy limpio. Lo usamos en la mayoría de nuestros proyectos.

+0

Lo uso y me gusta. Havent usó NHibernate, así que tal vez mi marco de referencia esté arruinado. – geofftnz

2

I segundo David Robbins menciona el subsónico. Sin embargo, una de las fallas que señalaré es que la documentación no es perfecta. Es muy fácil trabajar con él, solo tienes que saber cómo hacerlo.

Supongo que hay otra cosa que vale la pena mencionar: ¿qué bases de datos necesitas para soportar? Si necesita trabajar con algo que no sea SQL Server, no usaría LINQ. Podría estar equivocado en esto, pero la última vez que lo comprobé, no hay un buen soporte para bases de datos que no sean SQL Server.

Lo último que mencionaría es que no tiene que elegir solo una. He usado nHibernate, LINQ to SQL y Subsonic en el mismo proyecto con un éxito aceptable (aunque aconsejaría evitar eso si fuera posible). Mi consejo es pasar un poco de tiempo con todos ellos y aprender qué es lo mejor de cada uno.

Esto es lo que yo diría sobre cada uno:

  • LINQ a SQL - muy fácil de ponerse en marcha con. Pero si desea usar algo que no sea SQL Server, es prácticamente SOL.
  • NHibernate: este es probablemente el más poderoso de todos los ORM y es compatible con la mayoría de los RDBMS, pero puede ser tedioso trabajar con ellos ya que no hay muchos generadores de códigos libres realmente buenos para trabajar (can ' sin embargo, hablo por los que no son libres).
  • SubSonic: un buen compromiso entre NHibernate y LINQ to SQL. No admite tantos RDBMS como NHibernate, pero funciona con la mayoría de los que encontraría en el mundo de los negocios.

TL; DR: NHibernate si es necesario tener un gran control sobre la base de datos o la necesidad de apoyar algo oscuro. SubSonic si necesita trabajar con algo que no sea SQL Server. LINQ to SQL si solo desea ejecutar contra SQL Server.

+0

Buen trabajo que detalla los pros y los contras. –

1

Comprobación XmlDataMapper un ORM libre simple (Licencia LGPL) que deja una huella de memoria baja en comparación con los otros gigantes.
El proyecto de ejemplo proporcionado debe ser lo suficientemente bueno para comenzar.

Integrar XmlDataMapper todo lo que tiene que hacer es 4 pequeños pasos

  1. Crear una entidad de negocios/DTO para las mesas
  2. crear un archivo XML con la información de correspondencia entre la mesa y el DTO.
  3. Especifique el archivo DTO y xml en la configuración.
  4. Simplemente llame al DTOConverter.Convierta (dataReader) y otros métodos para convertir su registro de base de datos a DTO/entidad empresarial
Cuestiones relacionadas