0

表 Student、列:


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 (このテーブルを使用して、追加のプロパティを格納します。これらのプロパティは、学生に属しておらず、クラスにも属していません。それらは 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 に答える