Autor Tema: (aporte) Desarrollo en Capas .Net Entity Framework  (Leído 3786 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cristiantorres

  • Trade Count: (0)
  • Sv Jr.
  • **
  • Thank You
  • -Given: 0
  • -Receive: 12
  • Mensajes: 76
  • Bendiciones para todos
    • Blog dedicado a la programacion
(aporte) Desarrollo en Capas .Net Entity Framework
« : octubre 26, 2012, 11:56:55 am »
Introducción
Este sera el primero de 4 artículos en el que trataremos el desarrollo en capas en .net usando Entity Framework.

Aspectos a considerar
Se usara Visual Studio 2010 y Sql Express 2008.
Se realizara con los lenguajes de C# y VB.Net.(pero solo se explicara con c#)
Se usara la versión 4.1 de Entity Framework
Se usara un generador de plantillas T4.


En este primer articulo veremos como generar nuestro modelo de datos .edmx de entity framework y veremos como usar DbContext Generator para generar nuestro contexto y clases poco de nuestro modelo. Cual es la finalidad de esto separa las entidades de la persistencia para poder usar estas en otras capas. Para hacer esto necesitaremos la versión ADO.NET Entity Framework 4.1 tambien necesitaremos el generador de plantillas para c#  EF 4.x DbContext Generator for C# o para vb.net EF 4.x DbContext Generator for VB.NET

Lo que aremos a lo largo de todo el ejemplo sera dividir el proyecto en capas para poder notar todas las ventajas que esto aporta entre ellas reutilización de código, mejor mantenimiento  de la aplicación, separación de responsabilidades etc.

La siguiente imagen muestra la estructura que tendrá nuestro proyecto final y la comunicación que abra entre las diferentes capas.


Para todo el ejemplo usare una base de datos llamada Estudiantes que tiene el siguiente diseño.


Lo primero sera crear un proyecto en blanco y agregar una biblioteca de clases llamada DataAcces.

Ahora vamos a generar  el modelo de nuestra base de datos para eso agregamos un nuevo elemento y elegimos ADO.NET Entity Data Model.

Elegimos generar desde la base de datos.


Especificamos la cadena de conexión hacia la base de datos.


Ahora seleccionamos los objetos de la base de datos que queremos modelar en este caso seleccionamos las 3 tablas.


Con esto tendremos nuestro modelo de la base de datos.

Ahora vamos a generar nuestras clases poco haciendo uso del generador de DbContext. Para esto hacemos clic derecho en un espacio en blanco del modelo y elegimos Agregar elemento de generación de código.

Elegimos ADO.NET DbContext Generator(tienen que haberlo instalado antes).

Si aparece un cuadro de advertencia eligen no mostrar este mensaje de nuevo y aceptar. Esto agregara 2 plantillas(cuyos nombres terminan en .tt) a su proyecto.


La plantilla Students.Context.tt creó una clase DbContext conteniendo las colecciones de entidades y la plantilla Students.tt creó clases separadas para cada tabla.

Para que el modelo DbContext funcione necesita de la version 4.1 de entity framework(tienen que instalarlo) así que agregaremos la dll para eso agregamos una referencia al proyecto y buscamos la dll en la ruta que se instalo que por lo general es C:Archivos de programaMicrosoft ADO.NET Entity Framework 4.1Binaries


Ahora lo que aremos es mover la plantilla Students.tt la que contiene las clases de cada tabla a otro proyecto biblioteca de clases en este caso llamado Entities.

Para que esta plantilla funcione ahora que lo hemos movido a una proyecto nuevo tendremos que configurar la linea que apunta hacia el modelo EDMX para eso damos doble clic en la platilla Students.tt y cambiamos la ruta de string InputFile para que apunte hacia el modelo EDMX que se encuentra en el proyecto DataAcces.

Ahora cambiaremos el espacio de nombres de la platilla Students.Context.tt ya que las clases entidades las movimos hacia el proyecto Entities tenemos que modificar el espacio de nombres de la plantilla Students.Context.tt para esto abrimos la ventana de propiedades de la plantilla y establecemos el espacio de nombres en Entities.


Por ultimo lo que tenemos que hacer es agregar una referencia del proyecto Entities en el proyecto DataAcces.

Nota: En el caso del proyecto vb.net en la clase de la platilla Students.Context.vb es necesario agregar un Imports Entities para que el contexto reconozca las clases entidad.

Con esto terminamos la primera parte de nuestro Proyecto. Lo que hemos hecho es crear el modelo de nuestra base de datos y también hemos generado el contexto y las clases entidad del modelo y también hemos separado las clases entidad en un proyecto aparte para poder usar estas clases en las demás capas, ya que como lo dije al principio la finalidad de todos esto es separar las entidades de la persistencia.

Si quieren descargar los proyectos de esta primera parte tanto en c# como en vb.net los encontraran en mi blog.
Desarrollo en Capas Entity Framework(Parte 1)

También en mi blog pueden ver las partes 2 y 3 del ejemplo.
Desarrollo en Capas .Net (Parte 2) - Capa de Datos
Desarrollo en Capas .Net (Parte 3) - Capa de Negocio

La parte final(capa presentación) la publicare la otra semana en mi blog asi que si les intereso esten pendientes.

Saludos  :thumbsup:



Visita mi Blog C#, Asp.Net, Python y mas...
http://cristiantorresalfaro.blogspot.com
http://codemania.tk

Desconectado Jonhyrey

  • Trade Count: (0)
  • Sv Full Member
  • *
  • Thank You
  • -Given: 31
  • -Receive: 11
  • Mensajes: 558
Re:(aporte) Desarrollo en Capas .Net Entity Framework
« Respuesta #1 : septiembre 04, 2015, 06:43:06 pm »
Quiero revivir este muerto.

¿Porque?

Ahh porque estoy en medio de un desarrollo con este modelo de trabajo y tengo una duda existencial con el EntityFramework que me ha desanimado mucho a seguir usandolo.
* En la capa de acceso a datos. Desarrollando con Vb.net siempre es necesario transferir los datos de resultado de una consulta a un objeto entity?

Debe haber algun metodo que evite que hagamos esa reasignación sin que el sistema esté dando errores de conversión entre Linq y los objetos Genericos puesto que: !Son los mismos objetos con los que trabajamos! ¿Porque hemos de reasignarlos otra vez? ¿O es que no he entendido el metodo de asignación?

Saludos