none
Mapear tablas de la base de datos hacia aplicación C#. RRS feed

  • Pregunta

  • Hola amigos,

    ¿ Cual es la forma mas rápida de mapear las tablas de mi base de datos hacia mi aplicacion C# ?.  Uso VS 2019 - Winforms.
    (Es decir, para hacer las clases "POCO".  Tengo que mencionar que la base de datos ya existe)

    No tengo en mente usar Entity Framework, ya que según he leido por ahí...:
    -  Si las tablas no tiene un PK de un  solo campo e Identity, El EF no funciona bien. Algunas tablas de mi BD no cumple con esta característica.
    -  Si uno usa sus POPIAS CLASES(es decir sin usar EF) uno tiene mejor control.
    ¿ ....Qué opinan Uds. ? 

    También agradeceré si me pueden proporcionar ejemplos de N-CAPAS usando clases POCO. Y si tienen ejemplos de código fuente, sería mejor. Y cualquier información relacionada con el tema(links, PDFs, etc).

    Muchas gracias por su ayuda.

    Saludos,
    martes, 15 de septiembre de 2020 9:43

Respuestas

  • (Es decir, para hacer las clases "POCO".  Tengo que mencionar que la base de datos ya existe)

    Si solo quieres generar las clases POCO, pero no quieres generar el código que accede a ellas porque luego lo vas a hacer a mano, un truco consiste en usar provisionalmente cualquier ORM (como por ejemplo Entity Framework o incluso linq-to-sql), dejarle que genere las clases, y luego si quieres puedes desinstalar el ORM y quedarte solo con las clases. Por ejemplo, con EF puedes agregar al programa un .edmx y usar el asistente para seleccionar las tablas. Una vez que termines, te quedas con las clases que genera ocultas por debajo del edmx, y si quieres puedes borrar el edmx y quitar las referencias que te haya agregado para usar EF.

    EF no requiere que la PK sea de un solo campo, ni tampoco que sea Identity. Solo require que exista un índice de tipo Unique, que puede ser la clave primaria o no, y puede abarcar una o más columnas. Lo que pasa es que no siempre lo detecta automáticamente. Entonces tienes que editar a mano el edmx y decirle cuál es ese campo o combinación de campos que forman la clave de la tabla. Una vez hecho esto, sí que funciona perfectamente con esa tabla.

    SI uno usa sus propias clases, tiene mejor control, como tú dices. Pero también tiene que trabajar mucho más, y no siempre compensa la cantidad de trabajo a cambio del pequeño incremento en el control. Al final acabas "simplificando" por no trabajar tanto, y si no eres muy cuidadoso terminas por hacer algo que rinde menos que lo que te habría generado automáticamente la herramienta. En la práctica es preferible adoptar una solución de compromiso: usar EF (u otro ORM) para casi todo, y únicamente optimizar a mano el pequeño número de accesos a base de datos que sean críticos en cuanto a complejidad o rendimiento.

    • Marcado como respuesta eestradaa miércoles, 16 de septiembre de 2020 18:48
    • Desmarcado como respuesta eestradaa miércoles, 16 de septiembre de 2020 19:01
    • Propuesto como respuesta Sergio Parra jueves, 17 de septiembre de 2020 13:33
    • Marcado como respuesta eestradaa martes, 29 de septiembre de 2020 20:55
    martes, 15 de septiembre de 2020 18:47

Todas las respuestas

  • Yo probaria si eso que mencionas te genera algun tipo de error u problema en un proyecto pequeño de prueba con EF, pero intentaria usar el entity en tu proyecto en si, ya que te ahorra mas dolores de cabeza de los que te puede dar hacerlo por tu cuenta. Otras formas para mapear los datos no las he utilizado.

    Te adjunto un link donde hablan sobre como solucionar ese problema que tienes: Solucion


    tomasgavagnin


    • Editado Orion1998 martes, 15 de septiembre de 2020 14:45
    martes, 15 de septiembre de 2020 11:48
  • Hola eestradaa, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Como dice Orion yo probaría lo que quieres hacer pero está siempre la posibilidad de utilizar EF o otra opción podría ser NHibernate te dejo más información al respecto.

    nhibernate.info

    entity-framework-core vs nhibernate

     Andres Aguilar

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    • Marcado como respuesta eestradaa miércoles, 16 de septiembre de 2020 18:49
    • Desmarcado como respuesta eestradaa miércoles, 16 de septiembre de 2020 19:01
    martes, 15 de septiembre de 2020 14:42
  • (Es decir, para hacer las clases "POCO".  Tengo que mencionar que la base de datos ya existe)

    Si solo quieres generar las clases POCO, pero no quieres generar el código que accede a ellas porque luego lo vas a hacer a mano, un truco consiste en usar provisionalmente cualquier ORM (como por ejemplo Entity Framework o incluso linq-to-sql), dejarle que genere las clases, y luego si quieres puedes desinstalar el ORM y quedarte solo con las clases. Por ejemplo, con EF puedes agregar al programa un .edmx y usar el asistente para seleccionar las tablas. Una vez que termines, te quedas con las clases que genera ocultas por debajo del edmx, y si quieres puedes borrar el edmx y quitar las referencias que te haya agregado para usar EF.

    EF no requiere que la PK sea de un solo campo, ni tampoco que sea Identity. Solo require que exista un índice de tipo Unique, que puede ser la clave primaria o no, y puede abarcar una o más columnas. Lo que pasa es que no siempre lo detecta automáticamente. Entonces tienes que editar a mano el edmx y decirle cuál es ese campo o combinación de campos que forman la clave de la tabla. Una vez hecho esto, sí que funciona perfectamente con esa tabla.

    SI uno usa sus propias clases, tiene mejor control, como tú dices. Pero también tiene que trabajar mucho más, y no siempre compensa la cantidad de trabajo a cambio del pequeño incremento en el control. Al final acabas "simplificando" por no trabajar tanto, y si no eres muy cuidadoso terminas por hacer algo que rinde menos que lo que te habría generado automáticamente la herramienta. En la práctica es preferible adoptar una solución de compromiso: usar EF (u otro ORM) para casi todo, y únicamente optimizar a mano el pequeño número de accesos a base de datos que sean críticos en cuanto a complejidad o rendimiento.

    • Marcado como respuesta eestradaa miércoles, 16 de septiembre de 2020 18:48
    • Desmarcado como respuesta eestradaa miércoles, 16 de septiembre de 2020 19:01
    • Propuesto como respuesta Sergio Parra jueves, 17 de septiembre de 2020 13:33
    • Marcado como respuesta eestradaa martes, 29 de septiembre de 2020 20:55
    martes, 15 de septiembre de 2020 18:47
  • Muchas gracias por ayudarme amigos, son buenos sus consejos....esperaré un poco para ver si alguien mas pone su consejo para luego hacer la operación "Marcar como respuesta".

    Gracias nuevamente.

    miércoles, 16 de septiembre de 2020 21:00
  • Hola eestradaa, 

      

    ¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las  respuestas proporcionadas?  

    Espero su respuesta.  

    Gracias por usar los foros de MSDN.  

    Andres Aguilar 

    ____________________________  

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    lunes, 21 de septiembre de 2020 16:56