EntityFramework 多表多对多

本文关键字:EntityFramework | 更新日期: 2023-09-27 18:35:04

我正在使用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; }
}   

因此,联系人对象可以具有许多不同类型的关系,例如"母亲"、"父亲"、"兄弟"等。

我需要跟踪联系人参加的某种活动,但我想知道他与主持活动的人的关系。例如,他是事件的兄弟,父亲还是丈夫?在另一个活动中,同一个人可能会出现,但可能是事件者的姐夫。

要联系的事件是多对多;与接触的关系是一对多。

在SQL中,我们只需要创建一个链接表,并拥有所有三个属性Id(EventId,ContactId,RelationId(;但是,在Code First中,您将如何表示这种关系?

EntityFramework 多表多对多

与数据库相同,您必须创建一个映射实体,就像 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}
}