表学生は、列:これらのテーブルのエンティティ/モデルを定義する方法は?
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)
{
// ....
}
}
}
私は理解しています**いいえ**。あなたはあなたがA、B、C、Dのすべての手紙を台無しにしていないと確信していますか? CとDの関係は何ですか?それは多対多ですか?しかしTableCDの代わりにTableABDという結合テーブルがあるのはなぜですか?それとも結合テーブルではないのですか? – Slauma
@スラマ私は具体的なオブジェクトによって質問を改訂しました。あなたが今私の質問をすべて理解できることを願っています。 –
'StudentClass'と' StudentClassProperty'を2つのテーブルに分ける必要がありますか?テーブルを1つ(基本的に 'StudentClass'テーブルを削除する)し、' StudentClassProperty'をエンティティとして公開し、 'Student'と' StudentClassProperty'と 'Class'と' StudentClassProperty'の間に2対多の関係を作る方が簡単かもしれません'多対多の関係の代わりに。しかし、私はテーブル 'StudentClassCourse'を理解していません。この表の主キーとFKの関係は何ですか? – Slauma