2012-03-28 5 views
0

私のモデルのデザインに問題があります。このアプリケーションには、1人または複数の講師が教えるModules(Ie Universityモジュール)があり、講師は1つまたは複数のモジュールも教えることができるため、データベース設計上、モジュールと講師の多対多の関係があります。データベースは、この関係は、私はモデルデザインとLINQクエリ

public class Module 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public Department department { get; set; } 
    public string code { get; set; } 
    public virtual List<Lecturer> lecturers { get; set; } 

    ... 
} 

下に見られるように、仮想的改質とその逆とモジュールのクラスの講師のリストが含まれ、これを達成するために複合キーとしてMODULE_IDとLecturer_idを有する付加テーブルによって表されます講師クラス:

public class Lecturer 
{ 

    public int id { get; set; } 
    public string name { get; set; } 
    public virtual List<Module> modules { get; set; } 

    ... 
} 

私の最初の質問は、これが最善の方法ですモデルのこの状況を実装するには?しかし、これはうまくいくように見えますが、モジュールには講師が教えてくれたモジュールを教える講師がいます...など、非常に非効率的で最適ではないようです。また、このループのために、例えばモジュールをJSONオブジェクトとしてブラウザに返すことはできません。

最後に、正しい実装であれば、LINQを使用してモジュールをクエリし、その後、講師を持つ限定されたモジュールを返す方法がありますが、講義は制限されており、モジュールは関連付けられていません。現時点で私は次の声明を使用していますか?

Module module = dbContext.Modules.Where(r => r.id == id).Single(); 
+0

プログラムの設計に関するコメントが必要な場合は、Programmers.SEにアクセスしてください。コード自体に関する回答が必要な場合は、おそらく特定の問題を抱えているコードを貼り付ける必要があります。 –

+0

私は@GeorgeStockerに同意しません - これはStack Overflowに関する完全に有効な質問です。 – Randolpho

+0

@Randolpho *デザイン*の質問です(タイトルでもそうです)。したがって、それはプログラマーの質問です。 –

答えて

1

個人的には、多対多の関係を扱う場合、関係表をモデルの具体的な部分にしたいと思っています。つまり、LecturerModuleテーブルがあり、LecturerModuleの両方の参照があります。多対多の関係では、関係は事です。これは私にとって最も建築的な意味を持ち、ある種の複雑なループツリーで関係を隠そうとするのではなく、モデルをもっと簡単に扱えるようにします。

+0

返信いただきありがとうございますが、私はこのアプローチで不思議に思っていました。モジュールには講師のリストがなくなったとします。たとえば、新しいモジュールが追加された場合は、モジュールとModuleLecturerテーブルを別々のLINQステートメントで更新します。あなたが個別に質問する必要があった講師やModuleクラスの一部としてそれらにアクセスする方法があるかどうかを気にしていた場合は、ごめんなさい。 –

+0

私が言っていることは、リレーショナルデータベースでは、中間テーブルを使用せずに2つのテーブル間の多対多の関係を持つことができないということです。あなたはこれを知っていることを知っています。その関係テーブルを私のモデルの一部にすることは、私に最高の結果をもたらしました。あなたのケースでは、モジュールは実際に講師に含まれておらず、その逆もありません。したがって、コンテナシップは実際にモデルを反映しません。中間テーブルを常に両側が所有する別個のエンティティとして含めるのが最も理にかなっています。私はまだ最初にコードを使用していないので、私はあなたがしていることを誤解する可能性があります... – Jordan

+0

..しかし、関係は事であり、それ自体のエンティティにそれを作ることは、常に私のために良いされています。モジュールは講師なしでも存在することができ、その逆も可能です。モジュールは、ModuleLecturerの存在の外で、講師を所有しておらず、その逆もありません。そのエンティティは、その関係を確立する。 – Jordan