Код структуры сущностей - первая проблема сохранения «многие ко многим» - PullRequest
0 голосов
/ 26 февраля 2012

Хорошо, так.У меня есть это.2 класса.Оба со списком элементов друг друга, например, так:

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

Для простоты я удалил остаток беспорядка

Теперь, в моем коде те 'gerechten' (извините за голландца: D) добавляются к определенному «раздаче».Однако 'gerechten' с одним и тем же идентификатором, который указан в списке дважды (или более), не сохраняется, только один раз.

1 Ответ

1 голос
/ 26 февраля 2012

В отношении «многие ко многим» в 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 уникальна, вы можете добавить столько отношений между конкретным человеком и курсом, сколько пожелаете.Конечно, использование этой промежуточной таблицы необходимо только в этой ситуации.В противном случае то, что вы уже сделали, является правильным (по крайней мере из того, что я могу сказать на основе вашего вопроса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...