entity-framework-entidades

Entidades y propiedades en Entity Framework

  • 4 min

En Entity Framework, las entidades son la representación de los objetos de negocio que se mapean a tablas en una base de datos relacional.

Es decir, una entidad es una clase de C# que va a tener una representación en una tabla en la base de datos. Cada instancia de esta clase corresponderá a una fila en la tabla.

Por su parte, las entidades están compuestas por propiedades, que corresponden a las columnas de las tablas.

Características de las entidades

  • Clases simples: Las entidades son clases simples de C# (no dependen de ninguna clase base específica de Entity Framework)
  • Propiedades: Las propiedades de la clase representan las columnas de la tabla
  • Relaciones: Tienen relaciones con otras entidades, lo que permite modelar estructuras de datos complejas

Las entidades y sus propiedades son la base del modelado de datos en Entity Framework, y son las que nos permiten trabajar con los datos en forma de objeto de objetos, en lugar de manipular directamente las tablas de la base de datos.

Definición de una entidad

Para definir una entidad, simplemente creamos una clase en C#. Por ejemplo, supongamos que queremos modelar una tabla Productos en nuestra base de datos.

La entidad correspondiente podría verse así:

public class Producto
{
    public int Id { get; set; }
    public string Nombre { get; set; }
    public decimal Precio { get; set; }
    public int Stock { get; set; }
}

En este ejemplo,

  • La clase Producto representa la tabla Productos.
  • Cada propiedad de la clase (Id, Nombre, Precio, Stock) corresponde a una columna en la tabla.

Propiedades de una Entidad

Las propiedades de una entidad representan las columnas de la tabla. Cada propiedad tiene un tipo de dato que determina el tipo de columna en la base de datos.

EF Core intentará mapear automáticamente las propiedades de las clases de entidad a los tipos de datos adecuados en la base de datos, basándose en el tipo de la propiedad en C#.

Así, tenemos dos tipos principales de propiedades en Entity Framework.

  • Propiedades escalares: Representan valores simples como int, string, decimal, DateTime, etc.
  • Propiedades de navegación: Representan relaciones entre entidades.

Contienen la información y datos “básicos”. EF Core mapea estos tipos de datos de forma automática.

public class Producto
{
    public int Id { get; set; }
    public string Nombre { get; set; }
    public decimal Precio { get; set; }
    public DateTime FechaCreacion { get; set; }
}

En este ejemplo, Id, Nombre, Precio y FechaCreacion son propiedades escalares que se mapean a columnas en la tabla Productos.

Algunos tipos básicos de datos comunes en EF Core incluyen:

  • int -> INT
  • string -> VARCHAR
  • DateTime -> DATETIME
  • bool -> BIT

Aunque ya veremos que podemos personalizar este comportamiento.

Estas propiedades no se mapean directamente a columnas en la tabla, sino que permiten acceder a entidades relacionadas.

Por ejemplo, supongamos que tenemos una entidad Categoria y queremos relacionarla con Producto:

public class Producto
{
    public int Id { get; set; }
    public string Nombre { get; set; }
    public decimal Precio { get; set; }
    public int CategoriaId { get; set; } // Clave foránea
    public Categoria Categoria { get; set; } // Propiedad de navegación
}

public class Categoria
{
    public int Id { get; set; }
    public string Nombre { get; set; }
    public ICollection<Producto> Productos { get; set; } // Propiedad de navegación
}

En este caso, Categoria es una propiedad de navegación que permite acceder a la categoría a la que pertenece un producto. Del mismo modo, Productos en la clase Categoria es una propiedad de navegación que permite acceder a todos los productos de una categoría.

Configuración de entidades

Las entidades tienen que ser configuradas para poder usarlo. Por defecto, Entity Framework utiliza unas convenciones de nombre.

Por otro lado, en ocasiones necesitaremos cambiar o afinar, esta configuración. Entonces tendemos dos métodos principales, data annotations y el fluent API.

  • Convenciones de nombres, configuración implícita (basada en reglas predefinidas)
  • Data Annotations, configuración explícita usando atributos
  • Fluent API, configuración explícita usando funciones

Cada una de estas aproximaciones tiene sus ventajas y desventajas

MétodoVentajasDesventajas
Convenciones✅ Sencillo❌ Poco control sobre el mapeo
Data Annotations✅ Puede ser más legible
✅ Bueno para validaciones
❌ “Ensucia” las clases con atributos
❌ Limitado para relaciones complejas
Fluent API✅ Máximo control sobre el mapeo
✅ Configuración centralizada
❌ Curva de aprendizaje más alta

En general,

  • Usa convenciones de nombres cuando sean suficientes.
  • Si no lo son:
    • Usa Data Annotations para configuraciones simples (nombres, tipos básicos)
    • Prefiere Fluent API para Configuraciones complejas de relaciones

Evita mezclar ambos enfoques para la misma entidad (puede causar conflictos)