EntityFramework Mutli-Table «многие ко многим»

Я работаю с EF4.1 Code First и пытаюсь создать несколько таблиц отношений «многие ко многим», в которых необходимо будет связать эти таблицы. Пожалуйста, посмотрите небольшой фрагмент кода ниже:

class Event
{
    int EventId { get; set; }
    ICollection<Contact> Contacts { get; set; }
}

class Contact
{
    int ContactId { get; set; }
    ICollection<Relation> Relations { get; set; }
}

class Relation
{
    int RelationId { get; set; }
    string Name { get; set; }
}   

Таким образом, объект «Контакты» может иметь много разных типов отношений, таких как «Мать», «Отец», «Брат» и т. Д.

I need to track some kind of Event where a Contact attended, but I want to know how he is related to the person hosting the Event. So for example, was he the Eventer's Brother, Father or Husband? At another event, the same person could show up, but be the Eventer's Brother-in-Law.

Событие для контакта много-ко-многим; Отношение к контакту один-ко-многим.

В SQL мы просто создали бы таблицу ссылок и имели бы все три идентификатора свойств (EventId, ContactId, RelationId); однако в первом кодексеhow would you represent this relationship?

Ответы на вопрос(1)

Решение Вопроса

Как и в базе данных, вы должны создать сущность сопоставления, как ContactEvents, как таблица сопоставления в базе данных.

class Event
{
  int EventId { get; set; }
  ICollection<ContactEvent> ContactEvents { get; set; }
}

class ContactEvent
{
  int EventId {get;set;}
  int ContactId {get;set;}
  public virtual Event Event {get; set;}
  public virtual Contact Contact {get;set;}
}

class Contact
{
   int ContactId { get; set; }
   ICollection<ContactEvent> ContactEvents { get; set; }
   ICollection<Relation> Relations { get; set; }
}

class Relation
{
  int RelationId { get; set; }
  string Name { get; set; }
  public virtual Contact Contact {get; set}
}   

Ваш ответ на вопрос