多个多对多关系实体框架

时间:2016-09-20 07:20:24

标签: c# entity-framework ef-code-first ef-fluent-api

主要目标是能够在表格Mucle和Exercise之间建立多对多的关系。我想要一个练习同时拥有一个主要和一个辅助肌肉组。

是否有可能在一个模型中有两个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; }
    }

1 个答案:

答案 0 :(得分:1)

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

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

配合使用
  • 您为Junction表创建一个模型(一个类)并在其中插入一个鉴别器。您的模型发生了变化(我认为新模型不太清晰)
  • 为什么有肌肉和肌肉次要?可以用肌肉属性区分吗?在这种情况下,您可以在Muscle中拥有该属性并删除Exercise.MusclesSecondary然后您只有一个与处理Junction表的EF处理的n-m关系。
  • 如果您想要这个模型,您可以向Muscle添加2个集合(例如ExcercisesMuscle和ExercisesMusclesSecondary)和第3个未映射的集合,其中包含ExcercisesMuscle和ExercisesMusclesSecondary的内容。关于ExcercisesMuscle和ExercisesMusclesSecondary,它们可以是可观察的集合,因此您可以有效地缓存Exercises集合的内容。