0

表学生,列:


id int primary key,
name varchar(20) not null

表类,列:


id int primary key,
name varchar(20) not null

学生和班级是多对多的,所以我们有表StudentClass,在这个表中,我们会知道一个学生上哪些课,一个班级有哪些学生。


StudentId int FK,
ClassId int FK, 

接下来,表StudentClassProperty(使用该表存储额外的属性,这些属性不属于student也不属于class,它们属于class+student),列:


StudentId,
ClassId
Name,
Value,

表 课程


id,
name

和表StudentClassCourse(不同的班级,有不同的课程,但所有课程都是可选的)


StudentId,
ClassId,
CourseId

据我所知,模型可以是:


class Student 
{
 int Id,
 string Name,

 ICollection Classes,
}

class Class
{
 int Id,
string name,

 ICollection Students,
}

class Course
{
 int Id,
string Name
}

in DbContext class, defines the many-to-many relationship for Class and Student

_db.Entry(
  .HasMany(a => a.Classes)
  .WithMany(b => b.Students)
  .Map (m => m.MapLeftKey("StudentId").MapRightKey("ClassId").ToTable("StudentClass"));

但是如何定义表 StudentCLassPropery 和 StudentClassCourse 的关系?我想使用这样的实体:



foreach(Student s in _db.Students)
{
  foreach(Class c in s.Classes)
  {
    foreach(Course course in c.Coures)
    {
      // ....
    }
  }
}

4

1 回答 1

0

http://codebetter.com/jeremymiller/2007/02/01/composite-keys-are-evil/

受上述链接的启发,使用代理键替换复合键。比一切都变得更快更容易。

于 2012-05-07T09:05:00.940 回答