2016-09-20 263 views
2

主要目標是能夠在表格Mucle和練習之間建立多對多的關係。我想要一項運動既有一個主要的肌肉羣,也有一個雙側的肌肉羣。多對多關係實體框架

是否有可能在一個模型中有兩個icollections,只有一個在另一個模型中? 如果有人可以幫助「流暢配置」,我將不勝感激!

這是我現在得到的代碼。

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

你會用哪種方式在單個表格(即'肌肉')內單獨標識這2個? '肌肉'和'MusclesSecondary'? – 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

  • 您創建的結臺的模型(一類),並在其中插入一個鑑別工作。你的模型改變了(我認爲新模型不太清楚)
  • 爲什麼有一個肌肉和肌肉的輔助?它可以與肌肉的屬性區分開來嗎?在這種情況下,您可以在Muscle中擁有該屬性並移除Exercise.MusclesSecondary然後,您只有一個n-m關係,即EF使用Junction表處理。
  • 如果你想要這個模型,你可以添加2個集合到肌肉(例​​如ExcercisesMuscle和ExercisesMusclesSecondary)和第三個沒有映射的集合,其中你有ExcercisesMuscle和ExercisesMusclesSecondary的內容。關於ExcercisesMuscle和ExercisesMusclesSecondary,它們可以是可觀察的集合,因此您可以高效地緩存Exercises集合的內容。
+0

我並不是最有經驗的開發人員等等。肌肉和肌肉次要背後的原因是我想鍛鍊,原發性肌肉羣。像Benchpress有初級肌肉:胸大肌,前額動脈和次級:肱三頭肌。 我不明白你的意思是被歧視,斯里。 也許你可以舉一些代碼示例。感謝你的回答! – simon

+0

你的意思是Mucle上的一個房產,就像「bool IsPrimary」?然後只需要一個Muscle ICollection,並將LinQ的初級和次級肌肉分類出來? – simon

+0

是的,我的意思是。但是你的poco課應該反映你的世界,所以問題是'肌肉總是初級的,或者肌肉可以是主要的,而不是主要的?''。在第二種情況下,您應該使用第三個建議選項。 – bubi