2012-05-21 36 views
0

我正在使用EF4.1 Code First,并试图创建一些多对多关系表,其中表需要链接。请参阅代码beloow的小片段:EntityFramework Mutli-Table多对多

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; } 
} 

所以联系人对象可以有许多不同类型的关系,如“母亲”,“父亲”,“兄弟”等

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

联系事件是多对多的;与联系人的关系是一对多的。在SQL中,我们只创建了一个链接表,并在其中有所有三个属性Id(EventId,ContactId,RelationId);然而,在代码第一,你会如何代表这种关系?

回答

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} 
} 
+0

嗯......虽然这是我第一个想到的,在代码首先,你就可以将起来,而无需创建一个映射对象多对一对多的关系,所以我想看看我同样的事情可以在不创建全新对象的情况下完成。 –

+0

我不知道为什么你会避免创建一个全新的对象?任何原因? –

+0

也没有完全回答这个问题,因为在你的代码中,你指出了如何链接联系人到事件,但我需要链接联系人,事件和关系。可以使用约定来配置多对多关系。我基本上是在寻找一种多对多的关系。 –

相关问题