1

(ИСПОЛЬЗОВАНИЕ СТАТИСТИКИ ОБЩЕГО ПОЛЬЗОВАНИЯ 4.3 КОД ПЕРВЫЙ)
Как добавить объекты, когда в таблице соединений есть дополнительные данные (полезная нагрузка)?

Код приведен ниже. Я хочу на самом деле сделать что-то вроде:

var instanceStudent = new Student2(){...}; 
var instanceCourse = new Course2(){...}; 
instanceStudent.Add(instanceCourse); 
db.SaveChanges(); 

... или что-нибудь в этом дупле, если это работает. В принципе, я в настоящее время является noob в Entity Framework, и я хочу знать, как добавить Entity в другой Entity, в то время как таблица Junction имеет данные в нем (я знаю, что это легко на пустой соединительной таблице, м озадачен на этом)

public class Student2 
    { 
     [Key] 
     public virtual int StudentId { get; set; } 
     public virtual string StudentName { get; set; } 

     public virtual ICollection<Enrollment2> Enrollments { get; set; } 
    } 

    public class Course2 
    { 
     [Key] 
     public virtual int CourseId { get; set; } 
     public virtual string CourseName { get; set; } 

     public virtual ICollection<Enrollment2> Enrollments { get; set; } 
    } 

    public class Enrollment2 
    { 
     public virtual int StudentId { get; set; } 
     public virtual int CourseId { get; set; } 
     public virtual string Grade { get; set; } 

     public virtual Student2 Student { get; set; } 
     public virtual Course2 Course { get; set; } 
    } 

    public class ManyMany2 : DbContext, IContext 
    { 
     public DbSet<Student2> Students { get; set; } 
     public DbSet<Course2> Courses { get; set; } 
     public DbSet<Enrollment2> Enrollments { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<Student2>() 
       .HasKey(student => student.StudentId); 
      modelBuilder.Entity<Course2>() 
       .HasKey(course => course.CourseId); 
      modelBuilder.Entity<Enrollment2>() 
       .HasKey(enrollment => new { enrollment.StudentId, enrollment.CourseId }); 

      modelBuilder.Entity<Student2>() 
       .HasMany(student => student.Enrollments) 
       .WithRequired() 
       .HasForeignKey(enrollment => enrollment.StudentId); 
      modelBuilder.Entity<Course2>() 
       .HasMany(course => course.Enrollments) 
       .WithRequired() 
       .HasForeignKey(enrollment => enrollment.CourseId); 
     } 

     public void Run() 
     { 
      Database.SetInitializer(new DropCreateDatabaseAlways<ManyMany2>()); 

      var c1 = new Course2() { CourseName = "Spanish" }; 
      var c2 = new Course2() { CourseName = "Science" }; 
      var c3 = new Course2() { CourseName = "History" }; 

      var s1 = new Student2() { StudentName = "JC" }; 
      var s2 = new Student2() { StudentName = "Joe" }; 
      var s3 = new Student2() { StudentName = "Jill" }; 
     } 
    } 
+0

Is Enrollment2.Grade обязательное поле? –

+0

это не реальный проект, только я пытаюсь использовать EF Code First, но я в тупике ... если «требуется», как в случае проверки? нет. –

+0

Как и в этом случае не может быть NULL. –

ответ

2

Entity Framework не поддерживает прямые многие ко многим ассоциации, если таблица присоединиться имеет полезную нагрузку. Это означает, что вы должны сделать что-то вроде этого:

var instanceStudent = new Student2(){...};  
var instanceCourse = new Course2(){...}; 
var instanceEnrollment = new Enrollment2() 
     { Course = instanceCourse, Student = instanceStudent }; 
db.Enrollments.Add(instanceEnrollment); 
db.SaveChanges(); 

Вы также можете сделать (или аналогичный с курсами) следующее:

var instanceStudent = new Student2(){...}; 
var instanceCourse = new Course2(){...}; 
instanceStudent.Enrollments = new Enrollment2() { Course = instanceCourse }; 
db.Students.Add(instanceStudent); 
db.SaveChanges();