none
Guia sobre el uso correcto de Entity Framework en VS 2010 SP1 y VS 2012 RRS feed

  • Pregunta

  • Saludos comunidad estoy adentrandome al mundo de Entity Framework y tengo las siguientes dudas tanto para Visual Studio 2010 SP1 y Visual Studio 2012:

    1. Como se diseña la arquitectura en un modelo en n-capas con Entity Framework (donde iria el Entity Framework yo creo que en el modelo de negocio pero no estoy realmente seguro) si se puede proporcionar un ejemplo detallado estaria estupendo de como se conecta el Entity Framework con las demas capas.
    2. Escuche hablar de POCO, Code First y otras tantas cosas de realizar Entity Framework (realmente nose como funcionan), cual es la mas optima para empezar y luego gradualmente ir aprendiendo mas.
    3. Como hacer reportes con crystal reports y Entity Framework, ya que en Entity Framework no manejamos datasets.
    4. Como se maneja Entity Framework con ASP.NET MVC 3 y 4

    Gracias por su tiempo comunidad.




    • Editado RealMaster domingo, 20 de julio de 2014 17:02
    domingo, 20 de julio de 2014 2:00

Respuestas

  • 1. En un modelo en capas, las entidades de Entity Framework formarían parte de la "capa de comunicación", es decir, la que encapsula los datos que se mueven entre las demás capas. el código para grabar y leer datos mediante EF formaría parte de la capa de Datos.

    2. Si la base de datos que va a manejar tu programa ya existe, entonces usa EF en modo "database first". Pero si tienes que crearla nueva, probablemente te convenga más usar EF en modo "code first" (que usa clases POCO para definir las entidades), y dejar que EF cree la base de datos.

    3. Hasta donde yo sé (porque no suelo manejar Crystal Reports), esta herramienta se conecta directamente con la base de datos, y no sabe pasar a través de Entity Framework. Podrías cargar los datos en memoria mediante EF y luego pasárselos por código al report, pero no creo que ganes ninguna ventaja trabajando de esta manera.

    4. En cuanto a EF con ASP.NET MVC, usualmente lo que ocurre en aplicaciones sencillas es que a la hora de crear el Modelo de MVC se usa Entity Framework para generar Entidades que se usan como Modelo. Y las herramientas de Visual Studio tienen la opción de generar automáticamente Vistas y Controladores a partir de ese Modelo.

    En aplicaciones más sofisticadas, trabajas en capas, y el controlador llama a la capa de negocio que a su vez llama a un repositorio que a su vez llama a EF para acceder a los datos. El repositorio se inyecta como dependencia en la capa superior para poderlo sustituir por un simulador durante las pruebas unitarias. Así que EF queda relegada a la capa de datos y por tanto se "desacopla" de MVC.

    • Propuesto como respuesta Sergio Parra domingo, 20 de julio de 2014 13:49
    • Marcado como respuesta RealMaster lunes, 21 de julio de 2014 15:52
    domingo, 20 de julio de 2014 8:51
  • Bueno en un modelo en capas tengo Modelo (capa de negocios), Controlador (capa de acceso a datos) y la Vista (Presentacion de UI),

    Esto es un error. En MVC, el Modelo más el Controlador más la Vista forman entre los tres la capa de presentación.

    La capa de negocio consiste en un conjunto de subrutinas invocadas desde el Controlador.

    Y la capa de datos consiste en un conjunto de subrutinas invocadas desde la capa de negocio. Aquí es donde entraría EF, además de usar sus entidades para comunicación entre las otras tres capas (pero no necesariamente para comunicación entre el controlador y la vista, esto sólo podrá hacerse en casos triviales).

    No te confundas con los programas "triviales" habitualmente usados en los ejemplos y tutoriales, en los que el Modelo de MVC se genera con EF (haciéndolo coincidir con el modelo de Datos). Aunque en esos progrmas "ttriviales" ambos modelos son iguales, en cuanto tengas un programa de mayor envergadura necesitarás hacer la distinción. Escribí hace algún tiempo un pequeño post (en inglés) sobre este tema:

    http://www.campusmvp.net/blog/mvc-models-viewmodels

    En cuanto a la pregunta de los informes, no hay ninguna respuesta satisfactoria. Se puede usar un generador de informes tal como Crystal Reports o Reporting Services, pero estos atacan directamente a la base de datos (el modelo lógico en lugar del modelo conceptual, en terminología de EF). O se aguanta uno con esta forma de trabajar (es decir, se prescinde de EF para los informes), o hay que escribir los informes a mano prescindiendo de la herramienta. Tal vez algún otro lector pueda sugerir una herramienta de informes que sí que funcione sobre EF, pero a mí no se me ocurre ninguna.

    • Marcado como respuesta RealMaster lunes, 21 de julio de 2014 15:52
    lunes, 21 de julio de 2014 6:10

Todas las respuestas

  • 1. En un modelo en capas, las entidades de Entity Framework formarían parte de la "capa de comunicación", es decir, la que encapsula los datos que se mueven entre las demás capas. el código para grabar y leer datos mediante EF formaría parte de la capa de Datos.

    2. Si la base de datos que va a manejar tu programa ya existe, entonces usa EF en modo "database first". Pero si tienes que crearla nueva, probablemente te convenga más usar EF en modo "code first" (que usa clases POCO para definir las entidades), y dejar que EF cree la base de datos.

    3. Hasta donde yo sé (porque no suelo manejar Crystal Reports), esta herramienta se conecta directamente con la base de datos, y no sabe pasar a través de Entity Framework. Podrías cargar los datos en memoria mediante EF y luego pasárselos por código al report, pero no creo que ganes ninguna ventaja trabajando de esta manera.

    4. En cuanto a EF con ASP.NET MVC, usualmente lo que ocurre en aplicaciones sencillas es que a la hora de crear el Modelo de MVC se usa Entity Framework para generar Entidades que se usan como Modelo. Y las herramientas de Visual Studio tienen la opción de generar automáticamente Vistas y Controladores a partir de ese Modelo.

    En aplicaciones más sofisticadas, trabajas en capas, y el controlador llama a la capa de negocio que a su vez llama a un repositorio que a su vez llama a EF para acceder a los datos. El repositorio se inyecta como dependencia en la capa superior para poderlo sustituir por un simulador durante las pruebas unitarias. Así que EF queda relegada a la capa de datos y por tanto se "desacopla" de MVC.

    • Propuesto como respuesta Sergio Parra domingo, 20 de julio de 2014 13:49
    • Marcado como respuesta RealMaster lunes, 21 de julio de 2014 15:52
    domingo, 20 de julio de 2014 8:51
  • Muchas Gracias por responder Alberto, tengo las siguientes dudas:

    1. Bueno en un modelo en capas tengo Modelo (capa de negocios), Controlador (capa de acceso a datos) y la Vista (Presentacion de UI), lo que entiendo por tu respuesta para este punto es que el Entity Framework toma 2 capas que son capa de negocios y capa de acceso a datos, porque el Entity Framework me genera objetos de la base datos y tambien puedo realizar operaciones con conexion a base de datos, al final tendria 2 capas con Entity Framework una capa que tendria la logica de negocios y accesos a datos, otra capa con la presentacion UI, si me podria proporcionar un ejemplo para manejar esto estaria excelente.
    2. Punto entendido
    3. Cuando mencionas pero no creo que ganes ninguna ventaja trabajando de esta manera cual seria la manera mas optima de trabajo para este entorno
    4. entendido

    Saludos

    lunes, 21 de julio de 2014 0:13
  • Bueno en un modelo en capas tengo Modelo (capa de negocios), Controlador (capa de acceso a datos) y la Vista (Presentacion de UI),

    Esto es un error. En MVC, el Modelo más el Controlador más la Vista forman entre los tres la capa de presentación.

    La capa de negocio consiste en un conjunto de subrutinas invocadas desde el Controlador.

    Y la capa de datos consiste en un conjunto de subrutinas invocadas desde la capa de negocio. Aquí es donde entraría EF, además de usar sus entidades para comunicación entre las otras tres capas (pero no necesariamente para comunicación entre el controlador y la vista, esto sólo podrá hacerse en casos triviales).

    No te confundas con los programas "triviales" habitualmente usados en los ejemplos y tutoriales, en los que el Modelo de MVC se genera con EF (haciéndolo coincidir con el modelo de Datos). Aunque en esos progrmas "ttriviales" ambos modelos son iguales, en cuanto tengas un programa de mayor envergadura necesitarás hacer la distinción. Escribí hace algún tiempo un pequeño post (en inglés) sobre este tema:

    http://www.campusmvp.net/blog/mvc-models-viewmodels

    En cuanto a la pregunta de los informes, no hay ninguna respuesta satisfactoria. Se puede usar un generador de informes tal como Crystal Reports o Reporting Services, pero estos atacan directamente a la base de datos (el modelo lógico en lugar del modelo conceptual, en terminología de EF). O se aguanta uno con esta forma de trabajar (es decir, se prescinde de EF para los informes), o hay que escribir los informes a mano prescindiendo de la herramienta. Tal vez algún otro lector pueda sugerir una herramienta de informes que sí que funcione sobre EF, pero a mí no se me ocurre ninguna.

    • Marcado como respuesta RealMaster lunes, 21 de julio de 2014 15:52
    lunes, 21 de julio de 2014 6:10