1

(首先使用实体​​框架 4.3 代码)

代码如下。我实际上希望能够执行以下操作:

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

...或类似的东西,只要它有效。基本上,我目前是实体框架的菜鸟,我希望能够知道如何在连接表中有数据时在另一个实体中添加实体(我知道在连接表上很容易,但我很难过在这个)

    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" };
        }
    }
4

1 回答 1

2

如果连接表有负载,实体框架不支持直接多对多关联。这意味着您必须执行以下操作:

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(); 
于 2012-04-01T04:11:20.250 回答