Enteee
Enteee

Reputation: 137

How to add records in many to many table using DbContext

At the beginning I created the database in sql server Next i used a Entity Data Model (database first) and i get code that I embed below.

My db model:

db model

DbModel.cs

public virtual DbSet < Actor > Actor {get;set;}
public virtual DbSet < Genre > Genre {get;set;}
public virtual DbSet < Movie > Movie {get;set;}

public virtual DbSet < sysdiagrams > sysdiagrams {get;set;}

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    modelBuilder.Entity < Actor > ()
        .HasMany(e = > e.Movie)
        .WithMany(e = > e.Actor)
        .Map(m = > m.ToTable("MovieActors").MapLeftKey("ActorID").MapRightKey("MovieID"));

    modelBuilder.Entity < Genre > ()
        .HasMany(e = > e.Movie)
        .WithMany(e = > e.Genre)
        .Map(m = > m.ToTable("MovieGenres").MapLeftKey("GenreID").MapRightKey("MovieID"));

and the actor.cs

[Table("Actor")]
 public partial class Actor {
    public Actor() {
        Movie = new HashSet < Movie > ();
    }

    public int ID {get;set;}

    [Required]
    [StringLength(50)]
    public string FirstName {get;set;}

    [Required]
    [StringLength(50)]
    public string LastName {get;set;}

    public virtual ICollection < Movie > Movie {get;set;}
 }

Everything works but..

using(var db = new MovieDbModel()) {
    var movie = new Movie() {
        Title = "Test",
        Year = 1990
    };


    db.Actor.Add(new Actor {
        FirstName = "Al", LastName = "Pacino"
    });

    db.Genre.Add(new Genre {
        Name = "Action"
    });

    db.SaveChanges();

}

I do not know how to add actors to the movie because db.MovieActors not exist I made an error in the code?

I want insert to MovieActors (MovieID,ActorID) VALUES (1,1) but how?

Upvotes: 0

Views: 367

Answers (1)

Oleg
Oleg

Reputation: 1458

You should add movie entity to actor.Movie collection, for example:

    using (var db = new MovieDbModel("Server=localhost;Database=test;Trusted_Connection=True;"))
    {
        var movie = new Movie()
        {
            Title = "Test",
            Year = 1990
        };

        var actor = new Actor
        {
            FirstName = "Al",
            LastName = "Pacino"
        };

        db.Actor.Add(actor);

        actor.Movie.Add(movie);

        db.SaveChanges();

    }

Upvotes: 1

Related Questions