sqlmapper - Algunas sugerencias sobre qué.NET ORM para ver el aprendizaje
dapper orm download (9)
Como está utilizando .NET 3.5, recomiendo LINQ.
LINQ solo requiere que se implementen las interfaces IEnumerable e IQueryable.
Eso significa que no está limitado a datos relacionales.
Alse vea el artículo ORM en .NET 3.5
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.
Para mi propia carrera y como preparación para un nuevo proyecto en el trabajo (¡hecho en .NET finalmente!) Estoy buscando agregar un ORM a mi conjunto de habilidades: siendo el masoquista que soy, también voy a mirar a TDD mientras Estoy en esto para este proyecto.
De todos modos, estoy usando .NET 3.5 para el proyecto (o plan de, 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 qué 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.
NHibernate parece ser más robusto en general (Linq2Sql ni siquiera es un ORM "verdadero"), 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 escuchado cosas buenas y malas sobre EF, pero quiero elegir algo que me brinde una buena base además de quedar bien para otros empleadores si / cuando encuentro un mejor trabajo en una empresa con un verdadero equipo de desarrollo.
EDITAR: 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 utilizará es SQL Server 2005 Standard, que se ejecuta en Windows Server 2003. Dado que esto es para un proyecto de trabajo, mi objetivo es elegir algo que gane. Me tomará un tiempo muy largo 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 se hará con ASP.NET MVC.
Estoy detrás de la mención de David Robbins de 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 necesita para respaldar? 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 tienes que elegir solo uno. 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 diría sobre cada uno:
- LINQ to SQL: muy fácil de usar. 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 (no se puede hablar por los no libres, sin embargo).
- 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 necesita tener un gran control sobre la base de datos o necesita algo oscuro. SubSonic si necesita trabajar con algo que no sea SQL Server. LINQ to SQL si solo desea ejecutar contra SQL Server.
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 objetos, XML y básicamente cualquier cosa que sea IEnumerable / IQueryable.
Para el futuro, recomendaría Entity Framework (nuevamente, dentro del mundo de Microsoft). Hubo algunos anuncios de sonido de miedo del equipo LINQ2SQL dentro de Microsoft que parecen sugerir que todo el esfuerzo de desarrollo futuro se pondrá 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 a largo plazo en LINQ2SQL. Entity Framework todavía es relativamente nuevo y está en desarrollo activo, por lo que esperamos ver que EF finalice en los próximos meses / años.
Así que, en este momento, LINQ2SQL es excelente y puedes comenzar a usarlo rápidamente sin necesidad de sumergirte en el funcionamiento interno (es decir, árboles de expresión, etc.) pero para el futuro, 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, hay una gran cantidad de soluciones de 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 ver cuál es la más adecuada. adecuado para el proyecto específico en el que estás trabajando
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. :)
¿Por qué limitarse a uno solo 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 use Entity Framework un poco, estará 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 "¿a cuál debo intentar?". Pruébalos a todos, digo.
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.
Checkout 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.
Para integrar XmlDataMapper todo lo que necesita hacer es 4 pequeños pasos
- Crear una Entidad comercial / DTO para las tablas
- Cree un archivo XML con la información de asignación entre la tabla y el DTO.
- Especifique el archivo DTO y xml en la configuración.
- Simplemente llame al DTOConverter.Convert (dataReader) y a otros métodos para convertir su registro de base de datos a DTO / Business Entity
Recomendaría nhibernate, ya que es de código abierto y tiene una ayuda comunitaria muy activa que es fácil de obtener. Un buen punto de partida es The NHibernate FAQ , que abarca desde publicaciones para principiantes hasta conceptos muy avanzados. Empiece a trabajar leyendo y siguiendo Prepare su sistema para NHibernate y su primera aplicación basada en NHibernate .
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.
Muchas discusiones sobre este tema en :
¿Qué solución de mapeador de objetos recomendaría para .net?
¿Cuál es el mejor paradigma de acceso a datos para la escalabilidad?
Tanto EF como Nhibernate se consideran útiles para proyectos grandes. 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.