0

我已经在 EF 中看到了使用代码优先的多对多关系的几个示例,但我遇到了一种我不知道如何解决的情况。

我试图模拟这种情况

实体是客户、客人、活动 1。)客户注册活动 2。)每个客户都有客人可以带到他注册的活动中(例如,如果他已注册活动 1 并且数量为 3,他可以分配 2客人)

我使用一个简单的场景进行了尝试,在该场景中,我建立了多对多关系 b/w 客人和活动,它工作正常,我可以使用 events.guests 导航属性将客人添加到活动中

但是我需要让它与客户一起工作,我很难把我的头包起来,客户在哪里适合这个模型?

public class Guest
{
    public int GuestId { get; set; }
    public string GuestName { get; set; }
    public virtual ICollection<Event> Events { get; set; }
}

public class Event
{
    public int EventId { get; set; }
    public string EventName { get; set; }
    public virtual ICollection<Guest> Guests { get; set; }
}

这会生成一个映射表 GuestEvent,其中包含 GuestId、EventId

据我了解,添加了客户实体 customerId、EventId、GuestId 的映射表应该看起来像这样,但我该如何设置呢?

4

2 回答 2

1

CustomerEvent需要持有Guests,因为客人需要与特定客户和特定事件相关联。同一位客人可以参加不同的活动,也可以被不同的客户邀请。

public class Customer
{
    public int CustomerId { get; set; }
    public string CustomerName { get; set; }
    public virtual ICollection<CustomerEvent> CustomerEvents { get; set; }
}

publix class CustomerEvent
{
    public int CustomerEventId { get; set; }
    public virtual int CustomerId { get; set; }
    public virtual Customer Customer { get; set; }
    public virtual int EventId { get; set; }
    public virtual Event Event { get; set; }
    public virtual ICollection<Guest> Guests { get; set; }
}

public class Event
{
    public int EventId { get; set; }
    public string EventName { get; set; }
    public virtual ICollection<CustomerEvent> CustomerEvents { get; set; }
}

public class Guest
{
    public int GuestId { get; set; }
    public string GuestName { get; set; }
    public virtual ICollection<CustomerEvent> CustomerEvents { get; set; }
}
于 2012-04-25T21:06:04.550 回答
0

像这样的东西应该可以工作:这假设客户和事件之间的关系是 1:1,并且所有名称信息都在来宾对象上......

public class Guest
{
    public int GuestId { get; set; }
    public string GuestName { get; set; }
    public int CustomerId { get; set; }
    public virtual Customer Patron { get; set; }
    public virtual ICollection<Event> Events { get; set; }
}

public class Event
{
    public int EventId { get; set; }
    public string EventName { get; set; }
    public virtual ICollection<Guest> Guests { get; set; }
    public virtual ICollection<Customer> Customers { get; set; }
}

public class Customer
{
    public int CustomerId { get; set; }
    public int EventId { get; set; }
    public virtual ICollection<Guest> Guests { get; set; }
    public virtual Event Event { get; set; }
}
于 2012-04-25T21:04:57.523 回答