多个多对多关系 Entity Framework

Multiple Many-to-Many relationsship Entity Framework

主要目标是能够在 table Mucle 和 Exercise 之间建立多对多关系。我想要一个既有主要肌肉群又有次要肌肉群的运动。

是否可以在一个模型中有两个 icollection 而在另一个模型中只有一个? 如果有人也可以帮助 "fluent configuration",我将不胜感激!

这是我现在得到的代码。

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; }
    }

无法映射您描述的模型。
要映射您的模型(2 n-m 关系),您需要一个带有鉴别器的 Junction table,而您不能使用 EF 做到这一点。

您可以通过多种方式更改模型以使其与 EF 一起使用

  • 您为 Junction table 创建了一个模型 (a class) 并在其中插入了一个鉴别器。你的模型变了(而且我觉得新模型不太清楚)
  • 为什么会有 Muscles 和 MusclesSecondary?能不能用Muscle这个属性来区分?在这种情况下,您可以在 Muscle 中拥有该属性并删除 Exercise.MusclesSecondary 然后您只有一个 EF 处理与 Junction table 的 n-m 关系。
  • 如果您想要此模型,您可以向 Muscle 添加 2 个集合(例如 ExcercisesMuscle 和 ExercisesMusclesSecondary)和第三个未映射的集合,其中包含 ExcercisesMuscle 和 ExercisesMusclesSecondary 的内容。关于 ExcercisesMuscle 和 ExercisesMusclesSecondary 它们可以是可观察的集合,因此您可以有效地缓存 Exercises 集合的内容。