Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How should I seed data to many to many relation in Entity Framework Code first 5.0

I am having my first steps in EF 5.0 I have a many to many relationship. Movie can Have multiple Types and Type can have multiple Movies

public class Movie
{
    public int MovieId { get; set; }
    [Required]
    public string Name { get; set; }

    public virtual ICollection<Type> Types { get; set; }
}


public class Type
{
    public int TypeId { get; set; }
    public string MovieType { get; set; }

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

When I generated the Database it creates many-to-many between Movie and type

So, What should i do to seed this many to many table? I tried many solution posted here but it didn't works.

Also, is this the best way to Generate a Many-To-Many Relation using EF code first

like image 769
Amr Ramadan Avatar asked Jan 06 '13 14:01

Amr Ramadan


People also ask

Which method can be used to seed initial data in database using Entity Framework Core?

Seed Data in Entity Framework Core So as soon as we execute our migration files to create and configure the database, we want to populate it with some initial data. This action is called Data Seeding. So, we are using the HasData method to inform EF Core about the data it has to seed.


1 Answers

Just create a few movies and a few types and create relationships by adding some of those types to the Movie.Types collection (or the other way around), for example:

protected override void Seed(MyContext context)
{
    var movie1 = new Movie { Name = "A", Types = new List<Type>() };
    var movie2 = new Movie { Name = "B", Types = new List<Type>() };
    var movie3 = new Movie { Name = "C", Types = new List<Type>() };

    var type1 = new Type { MovieType = "X" };
    var type2 = new Type { MovieType = "Y" };

    movie1.Types.Add(type1);

    movie2.Types.Add(type1);
    movie2.Types.Add(type2);

    movie3.Types.Add(type2);

    context.Movies.Add(movie1);
    context.Movies.Add(movie2);
    context.Movies.Add(movie3);
}
like image 101
Slauma Avatar answered Nov 08 '22 19:11

Slauma