【发布时间】:2012-04-01 03:37:27
【问题描述】:
(首先使用实体框架 4.3 代码)
代码如下。我实际上希望能够执行以下操作:
var instanceStudent = new Student2(){...};
var instanceCourse = new Course2(){...};
instanceStudent.Add(instanceCourse);
db.SaveChanges();
...或类似的东西,只要它有效。基本上,我目前是 Entity Framework 的菜鸟,我希望能够知道如何在 Junction 表中有数据时在另一个实体中添加实体(我知道在 empty 连接上很容易表,但我被这个难倒了)
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" };
}
}
【问题讨论】:
-
Enrollment2.Grade 是必填字段吗?
-
这不是一个真实世界的项目,只是我尝试 EF Code First 但我很难过......如果“需要”作为验证要求?没有。
-
请不要在您的代码前加上实体框架。这就是标签的用途
-
@MystereMan 我只是好奇你为什么这么问?
-
@JanCarloViray - 因为我想知道在创建 Enrollment2 实例时是否需要提供 Grade。
标签: c# entity-framework ef-code-first many-to-many entity-framework-4.3