rafael malanco velazquez
EstudianteEdinson Jesús Paternina Rivera
EstudianteEste Using que usamos para las anotaciones en el modelo ya no seria necesario: using System.ComponentModel.DataAnnotations.Schema;
Kevin Castellano
Estudiante¿Por qué no podría poner?
tarea.Ignore(p => p.Resumen);
Miguel Teheran
ProfesorSi es posible!
Nicolas Guillen
EstudianteEl único problema que le veo a usar Fluent API es tener que actualizar el modelo y el contexto. Ahora por cada propiedad nueva, eliminada o modificada, hay que ir a context y hacer el cambio también. Depende del caso de uso pero para aplicaciones pequeñas yo sólo usaría DataAnnotations, y sólo usaría Fluent API en caso de ser necesario.
Eduardo David Santiago Carrillo
Estudiante📌 No necesitas editar el DbContext cada vez que usas Fluent API.
Usa IEntityTypeConfiguration<T> para separar la lógica:
csharpCopiarEditarpublic class PersonaConfig : IEntityTypeConfiguration<Persona>
{
public void Configure(EntityTypeBuilder<Persona> builder)
{
builder.Property(p => p.Nombre).HasMaxLength(100);
}
}
Y en el DbContext:
csharpCopiarEditarprotected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new PersonaConfig());
}
✅ Así el modelo queda limpio, y no repites nada en el DbContext.
✔ Fluent API sin dolor.
Juan Betancur
EstudianteCome se haría una relación de recurrencias?
Miguel Teheran
ProfesorTe refieres a una relación de muchos a muchos? de ese ya tenemos una respuesta
Este es un ejemplo de N:N, en lugar de poner WithMany usar WithOne:
modelBuilder.Entity<Author>() .HasOne(a => a.Biography) .WithOne(b => b.Author) .HasForeignKey<AuthorBiography>(b => b.AuthorRef);
Este seria un ejemplo de muchos con muchos: modelBuilder.Entity<BookCategory>() .HasKey(bc => new { bc.BookId, bc.CategoryId }); modelBuilder.Entity<BookCategory>() .HasOne(bc => bc.Book) .WithMany(b => b.BookCategories) .HasForeignKey(bc => bc.BookId); modelBuilder.Entity<BookCategory>() .HasOne(bc => bc.Category) .WithMany(c => c.BookCategories) .HasForeignKey(bc => bc.CategoryId);
Para mas info te recomiendo este sitio: https://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration
Marcos Lanuza
Estudiante¿Qué pasa con el mapeo de las propiedades virtuales? En este caso, la propiedad categoría dentro de Tarea. Esa puedo asumir que se mapea utilizando la llave foránea, verdad?
Miguel Teheran
ProfesorCorrecto, si se coloca como Virtual el interpreta que es como si fuera una foránea y nos sirve para llenar la información relacionada al momento de hacer un query.
Edinson Jesús Paternina Rivera
EstudiantePorque en la definición de Categoria no creo la propiedad de "Tareas", la propiedad virtual que esta definida en el Modelo?
Miguel Teheran
ProfesorLa propiedad virtual permite poder sobrescribirla y llenar la información que se necesite al momento de cargar la info desde SQL
Pablo Cesar Lara Londoño
EstudianteLike si también hiciste mal la ForeignKey 😂
tarea.HasOne(p => p.Categoria).WithMany(p => p.Tareas).HasForeignKey(p=> p.CategoriaId);
Juan Betancur
Estudiantecómo se haría una relación de mucho a muchos?
Miguel Teheran
ProfesorHola Juan puedes consultar esta documentación para poder lograrlo, es bastante sencillo y simplemente usas el Many para ambas referencias en una tabla intermedia que relacione tus 2 tablas: https://www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration
Rodolfo Maximo Hernández
EstudianteCuando se tienen más modelos y se necesita realizar las restricciones con Fluent API, ¿es recomendable seguir haciendo dicha configuración en el archivo de contexto? ¿Si no es así, como se debería realizar?
Miguel Teheran
ProfesorPuedes crear diferentes clases que reciban el contexto de EF como párametro. lo modifiquen y distribuir la lógica cuando va creciendo mucho. Puedes hacerla por nucleos de negocios, UsuariosConfig por ejemplo para todo lo relacionado a usuarios, roles y permisos y asi...
Francisco Javier Pineda Giraldo
EstudianteMiguel y compañeros que significa la p en la expresión lamda p => p.atributo es Una nemotecnia? o por que la p
Miguel Teheran
ProfesorBásicamente estas creando una función anonima y necesitas colocar un alias al parámetro, yo generalmente uso la 'p' pero depende mucho de la forma de programar
Sergio Sanchez
Estudianteyo uso item:
item => item.attribute
Juan Fonseca
EstudianteSolo quiero comentar que lo que dice en cuanto a nombrar las tablas en singular no es verdad. Las tablas se nombran en plural ya que guardan varios registros (entonces no guardo una "tarea", guardo varias "tareas". Es por eso que en la creación de la BD el Framework creó las tablas en plural
Junier Ayala Perez
EstudiantemodelBuilder.Entity<Tarea>(tarea =>
{
tarea.ToTable("Tarea");
tarea.HasKey(p => p.TareaId);
tarea.Property(p => p.Titulo).IsRequired().HasMaxLength(200);
tarea.Property(p => p.Descripcion).IsRequired(false).HasMaxLength(500);
tarea.Property(p => p.PrioridadTarea).IsRequired();
tarea.Property(p => p.FechaCreacion).IsRequired();
// Relación entre Tarea y Categoria
tarea.HasOne(p => p.Categoria)
.WithMany(c => c.Tareas)
.HasForeignKey(p => p.CategoriaId);
});
Israel Zapata Pacheco
EstudianteHola, no entiendo este error, mi relación la quiero de muchos canales a 1 usuario , alguna idea?
Miguel Teheran
ProfesorHasOne no se usa para Ids sino para las propiedades de referencia, aca esta la info: https://www.learnentityframeworkcore.com/configuration/fluent-api/hasone-method
Israel Zapata Pacheco
EstudianteMuchas gracias!!
Luis Collymoore
Estudiante modelBuilder.Entity<Tarea>(tarea => { tarea.ToTable("Tarea"); tarea.HasKey(c => c.TareaId); tarea.HasOne(c => c.Categoria).WithMany(c => c.Tareas).HasForeignKey(c => c.CategoriaId); tarea.Property(c => c.Titulo).HasMaxLength(200).IsRequired(); tarea.Property(c => c.Descripcion); tarea.Property(c => c.PrioridadTarea); tarea.Property(c => c.FechaCreacion); }); }