ADO Entity Framework

    El Entity Framework de ADO.NET es un ORM(Object/Relational) Mapping que hace posible que los desarrolladores podamos trabajar con la información, como si se tratase de objetos dentro de una aplicación, evitando tener que recodificar los objetos de acceso a datos de nuestras aplicaciones. Utiliza LINQ como lenguaje para poder hacer consultas y filtros en la información, asi como tiene todos los métodos necesarios para poder manipular la información y actualizarla, con objetos y librerías strong-types, que están basados en el modelo de datos de donde se generan las entidades(Entity) para nuestra aplicación.

    En otros palabras, puedo incluir el modelo de datos de mi aplicación, directamente al código .NET directamente como un middleware, donde además podemos incluir algo de reglas de negocio, o crear completamente un Framework para hacer Unit Testing, sin tener que salir de visual studio y obtener los resultados desde la misma aplicación. Lo más interesante de esto, es que el LINQ y el Entity Framework funcionan bien con cualquier base de datos. El tutorial que está disponible en línea, lo lleve paso a paso, pero en vez de utilizar SQL Server, use MySQL 5.4 community edition, y todo el tutorial funcionó de manera transparente, sin tener que modificar nada de código, y ajustando los parámetros de conexión a la hora de crear las entidades.

    Los ejemplos que presentaré, estan disponibles en el tutorial del Entity Framework, gratuito en la página www.asp.net, y puedes usar las versiones gratuitas de visual studio para poder utilizarlo. Para poder usar el Entity Framework, tenemos que crea un digrama de la base de datos, para MySQL, no es necesario, incluso en SQL Server, solo nos va a servir para poder ver la diferencia entre el modelo de la base de datos y el modelo de datos que el Entity Framework generó.

    Por ejemplo, tenemos el siguiente diagrama de una base de datos:

    A primera vista, por las relaciones establecidas en la base de datos, tenemos que una persona, en este caso, puede tener asignado un curso como instructor, una oficina, un grado o calificación de alguna materia, por lo que puede ser que en esta misma tabla, se almacena la información de todas las “Personas” en esta base de datos, ya sean alumnos o instructores, eso explica porque puedo tener un curso asignado como instructor, una oficina, y a la vez tener calificaciones dentro de la misma. Esto podría o sería ser un error en el diseño de la base de datos, pero nos va servir para explicar una de las cualidades del Entity Framework más adelante. Cuando utilizamos la opción de Visual Studio para crear el modelo de datos:

Tenemos como resultado, un modelo de datos de Entity Framework:

Podemos ver que el diagrama del EF es muy parecido al de la base de datos, excepto algunas diferencias que podemos ver en la imagen.

Una relación uno a cero o uno, está representado por “1”.. “0..1”

En este caso, una entidad Person puede o no, estar asociada con una asignación de Oficinas (OfficeAssignment), como habíamos mencionado, en la tabla Person, que dio como resultado la entidad Person, usa la misma tabla para almacenar estudiantes y a instructores, es por eso que puede o no tener una asociación con la tabla de asignación de oficinas, en este caso, la entidad OfficeAssignment.

Una relación uno a muchos, está representada por “1” y “*”

En este caso, una entidad Person puede o no estar asociada con la entidad StudentGrade, pero toda entidad StudentGrade debe de estar asociada a una entidad Person.

Una relación muchos a muchos está representada por “*” y “*”

En este caso, una entidad Person puede o no, estar asociada con una entidad Course, y una entidad Course puede o no estar relacionado con una entidad Person. O sea, un mismo curso puede ser dirigido por uno o varios instructores, o un mismo instructor puede eseñar varios cursos.

Otro detalle, y de los más importantes, son los Navigation Properties, que son establecidas en el Entity Framework y permiten tener acceso a la información relacionada con la entidad, que se encuentre almacena en otra entidad.

En este ejemplo, puedo obtener las calificaciones de una entidad person, usando la propiedad CourseGrades, puedo obtener las oficinas asignadas o los cursos que imparte un instructor.
Si nos fijamos en los diagramas, otra gran diferencia, es que ya la tabla CourseInstructor, no está presente en el diagrama, esta fue sustituida por las Navigation Property que se encuentran en el modelo de datos creado.

Cabe aclarar que esto es solo en el modelo de datos, y que el acceso a la información, y el almacenamiento de la misma, se va realizar como la base de datos este diseñada, pero en mi código o en mi aplicación voy a utilizar las entidades para obtener su información y la que esté relacionada, en otra o en varias tablas más de la base de datos, utilizando las NavigationProperties, o los objetos que estén definidos en las entidades en sí.

Otra característica que me permite el Entity Framework, es el poder crear Entidades que heredan de otra sus características, y aplica las diferencias que me indican, cuando se usa una, o cuando la otra. En este caso, Person puede ser un instructor o un estudiante, si siguen el tutorial la diferencia está en las fechas, un student tiene un HiredDate Null y un instructor tiene un EnrollmentDate null, basándome en esta distinción, puedo tener dos entidades, una Instructor y la otra Student, que hereden de Person, y que el Entity Framework sepa cuándo como salvar la información a la base de datos, o como distinguir la información existente y saber a qué entidad se refiere cada registro que exista en la base de datos.

Si vemos la imagen, podemos ver como la entidad Person tiene las propiedades en común de un Student y un Instructor, y en las entidades Student e Instructor está solo el campo que hace posible diferenciar, en la base de datos, cuando se trata de una o de la otra.
El poder especificar este tipo de condiciones en el modelo de datos, hace que ya no tenga que preocuparme a la hora de hacer las consultas, de filtrar la información, y dejar que el Entity Framework haga esa tarea por mí.
Después de un par de aplicaciones desarrolladas, utilizando este Framework, puedo comentar que:
Funciona transparentemente independiente de la base de datos.

  • Se integra increíblemente con MySQL, de hecho, el tutorial que está en la página de http://www.asp.net, lo pueden hacer todo en MySQL saltando el tener que crear el diagrama, y el resultado va a ser el mismo.

  • Te enfocas en la interface del usuario, y no en los datos.

  • Existen ya varios controles de terceros, que son compatibles con las fuentes de datos de Entity Framework.

  • No es soportado por MONO todavía, no hay fecha de cuando esto será posible.

  • En reportes el rendimiento no es el adecuado, y lo mejor es usar un DataSet. O usar convertir la entidad en un DataTable cuando necesitemos hacer reportes de informacion contenida en un modelo el entity framework

    Si quieren iniciar a usar el EF, este link contiene el primer tutorial para aprender a usarlo

Notas relacionadas :

You can leave a response, or trackback from your own site.

Deje una respuesta

Webdesign