One-to-many interaction in code

I have the following simple model that is implemented in the Code First approach. Department and courses are related to each other. A department can have many courses, while a course can belong to exactly one department. Here is a model.

public class Department
{
    public int DepartmentId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public virtual ICollection<Course> Courses { get; set; } 
       }

 public class Course
{
    public int CourseId { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public int DepartmentId { get; set; } 
    public virtual Department Department { get; set; }

}

My problem is that I want to mince them. I want at least 5 values ​​in my Seed function. Here is the function of Seed.

public class DataInitializer : DropCreateDatabaseIfModelChanges<StudentRecordContext>
{
    protected override void Seed(StudentRecordContext context)
{
    var departments = new  List<Department>
     {
        new Department {  DepartmentId = 1, Title = "English", Description ="English     Department",  Courses = new List<Course>() },
        new Department {  DepartmentId= 2,Title = "Chemistry",   Description ="chemistry department", Courses = new List<Course>() },
        new Department {  DepartmentId= 3,Title = "Mahematics", Description ="mathematics department", Courses = new List<Course>() },
        new Department {  DepartmentId= 4,Title = "Philosophy",  Description ="philosophy department", Courses = new List<Course>() },
        new Department {  DepartmentId= 5,Title = "Biology",     Description ="biology department", Courses = new List<Course>() }
    };                                                           
    departments.ForEach( t => context.Departments.Add(t));
    context.SaveChanges();


    var courses = new List<Course>
    {
        new Course { CourseId = 1055, Title = "Classic English",  Description = "Some        Description", DepartmentId = 1 },
        new Course { CourseId = 2055, Title = "Applied Chemistry",  Description = "Some Description", DepartmentId = 2 },
        new Course { CourseId = 2056, Title = "Applied Mathematics", Description = "Some Description", DepartmentId = 3 },
        new Course { CourseId = 3041, Title = "MetaPhysics",  Description = "Some Description", DepartmentId = 4 },
        new Course { CourseId = 3024, Title = "Molecular Biology", Description = "Some Description", DepartmentId = 5 },
    };
    courses.ForEach(t => context.Courses.Add(t));
    context.SaveChanges();

but it does not work. I am new to EF and Code First ... and timing ahead ... Can someone help me please how to choose the right DB saddle.

+5
source share
3 answers

Do not set primary keys in a method Seed(). Entity Framework will know that the properties with the identifier in the name will be primary.

Seed():

protected override void Seed(StudentRecordContext context)
{
    var departments = new  List<Department>
    {
        // this will have DepartmentId = 1
        new Department { Title = "English", Description ="English Department",  Courses = new List<Course>() },
        // more departments
    };
    departments.ForEach(d => context.Departments.Add(d));
    context.SaveChanges();

    var courses = new List<Course>
    {
        // this will have CourseId = 1
        new Course { Title = "Classic English",  Description = "Some Description", Department = departments.FirstOrDefault(d => d.DepartmentId == 1) },
        // this will have CourseId = 2
        new Course { Title = "Drama",  Description = "Some Description", Department = departments.FirstOrDefault(d => d.DepartmentId == 1) },
        // both of the above courses will be added to Department with DepartmentId = 1
        // more courses
    };
    courses.ForEach(c => context.Courses.Add(c));
    context.SaveChanges();

    // now add the two courses to the department
    departments[0].Courses.Add(courses[0]); // in list departments at index 0 add course from list courses at index 0
    departments[0].Courses.Add(courses[1]); // in list departments at index 0 add course from list courses at index 1
    context.SaveChanges();
}
+3

, [DatabaseGenerated(DatabaseGenerationOption.None)] CourseId DepartmentId, Entity , .

EntityFramework ,

   var courses = new List<Course>
        {
            new Course {Title = "Classic English",  Description = "Some        Description", Department=
     new Department {   Title = "English", Description ="English    
Department",  Courses = new List<Course>() }},
           .....
        };
        courses.ForEach(t => context.Courses.Add(t));

, , .

!

0

, "" "", SaveChanges():

var choices = new List<Choices>
{
    new Choices { Description = "Choice1" },
    new Choices { Description = "Choice2" },
    new Choices { Description = "Choice3" },
    new Choices { Description = "Choice4" }
};

choices.ForEach(c => context.Choices.AddOrUpdate(c));

context.Questions.AddOrUpdate(
    p => p.ID,
    new Question { QuestionText = "Question ?", Choices = choices }
    );  
0

All Articles