🧬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 únicoPerfil
.PerfilId
yUsuarioId
suelen ser el mismo valor para indicar esta relación uno-a-uno.Usuario
tiene una propiedad de navegaciónPerfil
, yPerfil
tiene una propiedad de navegaciónUsuario
.
🔹 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 variosCursos
.Curso
tiene una propiedadProfesorId
que es una clave foránea apuntando aProfesor
.Profesor
tiene una colección deCursos
, 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 variosCursos
y unCurso
puede tener variosEstudiantes
.La tabla de unión
EstudianteCurso
contiene claves foráneas de ambas tablas (EstudianteId
yCursoId
) y sirve para representar esta relación.
Última actualización