🧬Modelos

Creación de Modelos

Definir Clases de Modelo: Cada modelo es una clase en C#. Estas clases representan entidades en tu base de datos. Cada propiedad de la clase se mapeará a una columna en la tabla de la base de datos.

public class Estudiante
{
    public int EstudianteId { get; set; }
    public string Nombre { get; set; }
    // Otras propiedades
}

Anotaciones

Puedes utilizar Data Annotations o Fluent API para configurar aspectos del modelo, como restricciones, nombres de tablas, etc. Fluent API ofrece más opciones y es más flexible, pero Data Annotations es más directo y fácil de leer.

using System.ComponentModel.DataAnnotations;

public class Estudiante
{
    [Key]
    public int EstudianteId { get; set; }

    [Required]
    [StringLength(100)]
    public string Nombre { get; set; }
    // Otras propiedades
}

Definición de Relaciones

En Entity Framework, las relaciones entre entidades (o tablas) se representan mediante propiedades de navegación y claves foráneas. Estas relaciones se pueden categorizar principalmente en tres tipos: Uno-a-Uno, Uno-a-Muchos, y Muchos-a-Muchos.

Importante saber que una propiedad de navegación es una propiedad en una clase de entidad que hace referencia a otra entidad o entidades, permitiendo así acceder a las relaciones de una forma orientada a objetos. Las propiedades de navegación son claves para trabajar con relaciones entre entidades, ya que facilitan la manipulación y consulta de datos relacionados en una aplicación.

A diferencia de las propiedades normales de una entidad que se mapean a una columna en una tabla de base de datos, las propiedades de navegación se utilizan para representar las relaciones y no tienen una representación directa en la tabla.

🔹Relación Uno-a-Uno

En una relación Uno-a-Uno, una entidad está asociada directamente con otra entidad.

public class Usuario
{
    [Key]
    public int UsuarioId { get; set; }

    [Required, StringLength(100)]
    public string Nombre { get; set; }

    // Propiedad de navegación
    public virtual Perfil Perfil { get; set; }
}

public class Perfil
{
    [Key, ForeignKey("Usuario")]
    public int PerfilId { get; set; }

    [Required, StringLength(200)]
    public string Bio { get; set; }

    // Propiedad de navegación
    public virtual Usuario Usuario { get; set; }
}
  • Cada Usuario tiene un único Perfil.

  • PerfilId y UsuarioId suelen ser el mismo valor para indicar esta relación uno-a-uno.

  • Usuario tiene una propiedad de navegación Perfil, y Perfil tiene una propiedad de navegación Usuario.

🔹 Relación Uno-a-Muchos

En una relación Uno-a-Muchos, una entidad puede estar asociada con varias entidades de otro tipo.

public class Profesor
{
    [Key]
    public int ProfesorId { get; set; }

    [Required, StringLength(100)]
    public string Nombre { get; set; }

    // Propiedad de navegación
    public virtual ICollection<Curso> Cursos { get; set; }
}

public class Curso
{
    [Key]
    public int CursoId { get; set; }

    [Required, StringLength(100)]
    public string Titulo { get; set; }

    [ForeignKey("Profesor")]
    public int ProfesorId { get; set; }

    // Propiedad de navegación
    public virtual Profesor Profesor { get; set; }
}
  • Un Profesor puede impartir varios Cursos.

  • Curso tiene una propiedad ProfesorId que es una clave foránea apuntando a Profesor.

  • Profesor tiene una colección de Cursos, mostrando la relación de uno a muchos.

3. Relación Muchos-a-Muchos

En una relación Muchos-a-Muchos, varias entidades de un tipo pueden estar asociadas con varias entidades de otro tipo.

public class Estudiante
{
    [Key]
    public int EstudianteId { get; set; }

    [Required, StringLength(100)]
    public string Nombre { get; set; }

    // Propiedad de navegación
    public virtual ICollection<EstudianteCurso> EstudianteCursos { get; set; }
}

public class Curso
{
    [Key]
    public int CursoId { get; set; }

    [Required, StringLength(100)]
    public string Nombre { get; set; }

    // Propiedad de navegación
    public virtual ICollection<EstudianteCurso> EstudianteCursos { get; set; }
}

public class EstudianteCurso // Tabla de unión
{
    [Key, Column(Order = 0), ForeignKey("Estudiante")]
    public int EstudianteId { get; set; }

    [Key, Column(Order = 1), ForeignKey("Curso")]
    public int CursoId { get; set; }

    public virtual Estudiante Estudiante { get; set; }
    public virtual Curso Curso { get; set; }
}
  • Un Estudiante puede inscribirse en varios Cursos y un Curso puede tener varios Estudiantes.

  • La tabla de unión EstudianteCurso contiene claves foráneas de ambas tablas (EstudianteId y CursoId) y sirve para representar esta relación.

Última actualización