es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Semilla de Entity Framework en OnModelCreating con relación muchos a muchos.

Tengo 2 clases con una relación de muchos a muchos.

public class Actor
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<movie> Movies { get; set; }
}

public class Movie
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<actor> Actors { get; set; }
}

Me gustaría agregar datos en las tablas generadas a través de OnModelCreating.

Siempre tengo un error porque actormovie no existe en este momento.

¿Podrías ayudarme?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Claro! Para agregar datos en las tablas generadas a través del método OnModelCreating, puedes utilizar la API fluida para configurar la relación de muchos a muchos entre las entidades Actor y Movie. Aquí tienes un ejemplo:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<actor>()
            .HasMany(a => a.Movies)
            .WithMany(m => m.Actors)
            .UsingEntity(j => j.ToTable("ActorMovie"));
    }
    

    Ten en cuenta que .UsingEntity(j => j.ToTable("ActorMovie")) especifica el nombre de la tabla de unión. Si deseas personalizar aún más la tabla de unión, puedes utilizar los métodos HasForeignKey y HasPrincipalKey para especificar las claves externas.

    Una vez que hayas agregado la configuración para la relación de muchos a muchos, puedes agregar datos a las tablas. Sin embargo, no debes agregar datos directamente a la tabla de unión (ActorMovie) – en su lugar, debes agregar nuevas entidades Actor y Movie, y luego agregar las entidades relevantes a las colecciones de cada una. Por ejemplo:

    var actor = new Actor
    {
        Name = "Tom Hanks",
        Movies = new List<movie>()
    };
    
    var movie = new Movie
    {
        Name = "Forrest Gump",
        Actors = new List<actor>()
    };
    
    actor.Movies.Add(movie);
    movie.Actors.Add(actor);
    
    context.Actors.Add(actor);
    context.Movies.Add(movie);
    context.SaveChanges();
    

    Esto creará una nueva entidad Actor con una sola entidad Movie en su colección de Movies, y viceversa. Cuando llames a SaveChanges, Entity Framework automáticamente creará las filas en las tablas Actor y Movie, así como la tabla de unión (ActorMovie) con los valores correctos de las claves externas.

Comments are closed.