2016-09-20 7 views
2

主な目標は、テーブルMucleとExerciseの間に多対多の関係を持つことです。私はエクササイズにプライマリとセカンダリの両方の筋肉グループを持たせたい。複数の多対多リレーションシップエンティティフレームワーク

1つのモデルに2つのicollectionを持たせることは可能ですか? 誰かが "流暢な設定"にも助けてくれたら、私はそれを感謝します!

ここに私が今持っているコードがあります。

public class Muscle 
    { 
     public int MuscleID { get; set; } 
     public bool IsFront { get; set; } 
     public string Name { get; set; } 

     public virtual ICollection<Exercise> Exercises { get; set; } 
    } 

    public class Exercise 
    { 
     public int ExerciseID { get; set; } 
     // ExerciseCategory 
     public int ExerciseCategoryID { get; set; } 
     public DateTime CreationDate { get; set; } 
     public string Description { get; set; } 
     public string Name { get; set; } 

     public virtual ExerciseCategory ExerciseCategory { get; set; } 
     public virtual ICollection<Muscle> Muscles { get; set; } 
     public virtual ICollection<Muscle> MusclesSecondary { get; set; } 
    } 
+0

どのようにして1つのテーブル(つまり、「筋肉」)内の2つを個別に識別しますか? 'Muscles'と' Muscles Secondary'? – Sampath

+0

あなたが何を求めているのか分かりません。私はかなり初心者です。 しかし、私は "var Muscles = db.Exercises.Where(e => e.ExerciseID == exerciseID.Value).Muscles"と "var MusclesSecondary = db.Exercises.Where(e => e .ExerciseID == exerciseID.Value).MusclesSecondary "となります。 – simon

答えて

1

説明したモデルをマップする方法はありません。
モデル(2 n-m関係)をマップするには、ディスクリミネータ付きのジャンクションテーブルが必要です。EFではこれを実行できません。

あなたはそれはあなたがジャンクションテーブルのためのモデル(クラス)を作成し、その中で弁別を挿入EF

  • で動作させるために、あなたのモデルを変更するには、いくつかの方法があります。あなたのモデルは変更されています(と私は新しいモデルがあまり明確ではないと思います)
  • なぜ筋肉と筋肉が二次的ですか?マッスルの属性で差別できるか?この場合、マッスルにアトリビュートを設定してExercise.MusclesSecondaryを削除することができます。次に、EFがジャンクションテーブルで処理するn-mリレーションシップのみがあります。
  • マッスルに2つのコレクション(ExcercisesMuscleやExercisesMusclesSecondaryなど)を追加し、3つ目のマップされていないコレクションにExcercisesMuscleとExercisesMusclesSecondary toghetherのコンテンツを追加できます。 ExcercisesMuscleとExercisesMusclesSecondaryについては、観察可能なコレクションであるため、Exercisesコレクションのコンテンツを効率的にキャッシュすることができます。
+0

私は筋肉や筋肉の後ろの推論は、私はエクササイズには、主要な筋肉グループを持ってほしいということです。 Benchpressのように一次筋肉があります:大胸筋、前腹、二次:三頭筋Brachii。 私はあなたが差別された、泣いていることを理解していません。 多分あなたはいくつかのコードの例を挙げることができます。答えをありがとう! – simon

+0

"bool IsPrimary"のような、Mucleのプロパティを意味しましたか?そして、ただ1つのマッスルICollectionを持って、LinQによってプライマリとセカンダリの筋肉を並べ替えますか? – simon

+0

はい、私はそれを意味します。しかし、あなたのポコのクラスはあなたの世界を反映するはずなので、「筋肉は常にプライマリか、筋肉はプライマリでプライマリではありませんか? 2番目のケースでは、3番目の推奨オプションを使用する必要があります。 – bubi

関連する問題