实体框架代码首先是多对多保存问题

时间:2012-02-26 14:24:46

标签: c# asp.net-mvc-3 entity-framework-4.1

好的。我有这个。 2节课。两者都列有彼此的项目如下:

    public class Bestelling
    {
      public virtual ICollection<Gerecht> Gerechten { get; set; }
    }
    public class Gerecht
    {
    public virtual ICollection<Bestelling> Bestellingen { get; set; }
    }

为简单起见,我删除了其余的杂乱

现在,在我的代码中,那些'gerechten'(抱歉荷兰语:D)被添加到特定的'bestelling'中。 但是,列表中两次(或更多)相同ID的“gerechten”不会保存,只会保存一次。

1 个答案:

答案 0 :(得分:1)

在Code First中的多对多关系中,将在两个单独的对象之间使用复合键。因此,在中间表中(由于您将使用对象模型来访问您的信息,因此不一定向您显示),您可以根据需要组合尽可能多的Gerecht和Bestellingen - 只要组合这两个项目是唯一的(想想一个复合键)。如果您尝试在Gerecht和Bestellingen之间创建其他关系,则只有在存在其他唯一标识符时才能这样做。在这种情况下,您应该创建一个附加对象以及相应的复合键。

示例(抱歉......不熟悉荷兰语,所以我将使用英语示例):

public class Person
{
  public int PersonID { get; set; }

  public virtual ICollection<PersonCourse> PersonCourses { get; set; }
}

public class Course
{
  public int CourseID { get; set; }

  public virtual ICollection<PersonCourse> PersonCourses { get; set; }
}

public class PersonCourse
{
  [Key, Column(Order = 0)]
  public int PersonID { get; set; }
  [Key, Column(Order = 1)]
  public int CourseID { get; set; }
  [Key, Column(Order = 2)]
  public int AnotherUniqueParameter { get; set; }

  // Navigation Properties
  public virtual Person { get; set; }
  public virtual Course { get; set; }
}

只要PersonCourse中三列的组合是唯一的,您就可以根据需要在特定的Person和Course之间添加任意数量的关系。当然,只有在这种情况下才需要使用这个中间表。否则,你已经完成的工作是正确的(至少根据你的问题可以告诉你)。

相关问题