2012-05-03 7 views
0

表学生は、列:これらのテーブルのエンティティ/モデルを定義する方法は?


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

テーブルクラス、列:


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

学生とクラスは多対多なので、私たちはテーブルStudentClassを持って、この表では、我々は知っているだろうクラスは1つのクラスの中で生徒が受け取ります。


StudentId int FK, 
ClassId int FK,

次に、表StudentClassProperty(これらのプロパティは、学生に属していないとクラスに属していない、彼らはクラス+学生に属し、余分な性質を保存するために、このテーブルを使用)、カラム:


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) 
    { 
     // .... 
    } 
    } 
} 

+0

私は理解しています**いいえ**。あなたはあなたがA、B、C、Dのすべての手紙を台無しにしていないと確信していますか? CとDの関係は何ですか?それは多対多ですか?しかしTableCDの代わりにTableABDという結合テーブルがあるのはなぜですか?それとも結合テーブルではないのですか? – Slauma

+0

@スラマ私は具体的なオブジェクトによって質問を改訂しました。あなたが今私の質問をすべて理解できることを願っています。 –

+0

'StudentClass'と' StudentClassProperty'を2つのテーブルに分ける必要がありますか?テーブルを1つ(基本的に 'StudentClass'テーブルを削除する)し、' StudentClassProperty'をエンティティとして公開し、 'Student'と' StudentClassProperty'と 'Class'と' StudentClassProperty'の間に2対多の関係を作る方が簡単かもしれません'多対多の関係の代わりに。しかし、私はテーブル 'StudentClassCourse'を理解していません。この表の主キーとFKの関係は何ですか? – Slauma

答えて

関連する問題