Вопрос по entity-framework, c# – EntityFramework Mutli-Table «многие ко многим»

0

Я работаю с 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   ответ
4

вы должны создать сущность сопоставления, как 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}
}   
кроме того, это не совсем отвечает на вопрос, потому что в своем коде вы указываете, как связать контакт с событием, но мне нужно связать контакт, событие и отношение. Отношение «многие ко многим» можно настроить с помощью соглашений. По сути, я ищу отношения «многие ко многим ко многим». Tomasz Iniewicz
Я не знаю, почему бы вам не создать совершенно новый объект? какие-либо причины?
хм ... хотя это было моей первой мыслью, в Code First вы можете подключить отношения многие ко многим, не создавая объект сопоставления, поэтому я пытаюсь понять, можно ли сделать то же самое, не создавая совершенно новый объект. Tomasz Iniewicz
Я не возражаю против создания другого объекта, но если есть лучший способ сделать это, почему бы не сделать это таким образом? Tomasz Iniewicz
Для отслеживания сущностей вам понадобятся виртуальные свойства, добавьте виртуальные свойства, и вы сможете отслеживать контакты, события и отношения, я думаю, вам нужно создать сущность для каждой таблицы в вашей базе данных.

Похожие вопросы