[EF + Oracle] Entidades

Prologo

Continuando con la serie que comencé ayer sobre Entity Framework contra Oracle, voy a comenzar a hablar sobre las Entidades.

¿Qué es una Entidad?

Una entidad es un tipo de objeto del modelo de EF que se corresponde con una registro de una tabla de la Base de Datos. Como ejemplo, vamos a ver, la siguiente imagen donde aparece una entidad de nuestro modelo (Imagen 1) y en la siguiente imagen donde se ve el mapeo que sea realiza entre columnas de la Tabla de BD con las propiedades del objeto (Imagen2).

(Imagen1)

(Imagen2)

A continuación vamos a ver más en profundidad que es una entidad, internamente.

Es una clase que hereda de la Clase Abstracta “EntityObject” perteneciente al espacio de Nombres “System.Data.Objects.DataClasses”. A su vez esta clase hereda de los siguientes objetos:

  • StructuralObject: Es una clase abstracta que implementa las interfaces INotifyPropertyChanging, INotifyPropertyChanged (Propiedades que nos permiten detectar cambios en una clase). y donde se definen los eventos encargados de determinar los cambios y las funciones encargadas de verificar los tipos de datos de las propiedades de nuestra Entidad.
  • IEntityWithKey: Interfaz que va a servir para exponer la Clave de la Entidad.
  • IEntityWithChangeTracker: Interfaz que va a servir para indicar que estado tiene la entidad(Añadido, Modificado…)
  • IEntityWithRelationships: Interfaz que va a servir para indicar las relaciones de la entidad.

 

¿Qué Contiene una Entidad?

Una entidad está formada por propiedades, propiedades de Navegación y métodos.

¿Qué es una Propiedad?

Una propiedad es un objeto Mapeado con una columna de una tabla de la Base de Datos. Presenta un tipo de dato el cual es el equivalente en .Net Framework con respecto de la Base de datos.

Cuando generamos nuestro modelo de Entity Framework, Visual Studio internamente genera el código de todas las entidades, así como los métodos que veremos en posteriores episodios de la serie.

Para cada propiedad, se genera una estructura como la siguiente:

  • Variable privada del tipo indicado en las propiedades de Mapeo de la columna.
  • Función del tipo On{Nombre_Propiedad}Changing({tipoDato} value): Encargada de manejar el evento de cambio del valor de la propiedad
  • Función del tipo On{Nombre_Propiedad}Changed: Encargada de manejar el evento que indica que la propiedad ha cambiado su valor
  • Propiedad con los métodos Get y Set.
    • El método Set, que es el encargado de almacenar el valor en la variable privada, va a efectuar los siguientes pasos:
      • Invocar el evento Changing.
      • Indicar en la entidad que la propiedad está cambiando.(ReportPropertyChanging)
      • Establecer el valor en la Variable Privada. Para ello va a hacer uso de la función SetValidValue, de la clase StructuralObject. Existe una función para cada tipo de dato. Recibe el valor obtenido en el SET y envía un parámetro que indica si la propiedad admite valores Nulos o no. Si el valor no es válido se provocará una excepción.
      • Invoca a ReportPropertyChanged, para indicar que la propiedad ha cambiado.
      • Invoca al evento Changed de la Propiedad.

Cabe destacar que los eventos ReportPropertyChanging y ReportPropertyChanged, sirven respectivamente para indicar que hay cambios pendientes en la entidad, y que los cambios se han llevado a cabo. Durante la invocación a ReportPropertyChanged, se cambia el estado de la Entidad a Modificado.

¿Qué es una Propiedad de Navegación?

Una Propiedad de Navegación, es una propiedad del tipo EntityCollection<TEntity> donde TEntity será un tipo de Entidad del modelo de EF que tenga relación con la Entidad que estamos utilizando, es decir, es una tabla de la Base de Datos con lo que existe una relación.

La clase Entitycollection<TEntity> hereda de los siguientes elementos:

  • RelatedEnd: Clase abstracta que aporta la funcionalidad necesaria para obtener los datos relacionados.
  • ICollection<TEntity>
  • IEnumerable<TEntity>
  • IEnumerable
  • IListSource

Para las interfaces indicadas os recomiendo que leáis este post de José Miguel Torres en el que habla de las colecciones.

Gracias a las Propiedades de Navegación, vamos a poder ver los datos relacionados con una entidad y consultarlos de forma muy sencilla.

¿Métodos?

Existe un único método estático, del tipo Create{Entidad}, el cual recibiendo como parámetros todos las propiedades de la Entidad, genera un nuevo objeto de la Entidad y lo devuelve al método que lo invocó.

 

Conclusiones

Después de este capítulo entenderemos que son las Entidades, su relación con la Base de Datos y la relación con otras entidades del modelo.

En próximos capítulos, veremos como realizar las operaciones CRUD(Inserción, Lectura, Actualización y Borrado).

3 comentarios en “[EF + Oracle] Entidades”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *