【问题标题】:modelling a relationship customer, conference, guest建模关系客户、会议、客人
【发布时间】:2012-04-26 05:06:04
【问题描述】:

我在 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

据我了解,添加了客户实体的映射表应该如下所示 客户 ID、事件 ID、访客 ID 但是我该如何设置呢?

【问题讨论】:

    标签: c# entity-framework database-design poco


    【解决方案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; }
    }
    

    【讨论】:

    • 谢谢,超级及时的回答,今天我会继续努力,希望有更好的主意,这绝对可以解决很多问题!
    【解决方案2】:

    这样的事情应该可以工作:假设客户和事件之间的关系是 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; }
    }
    

    【讨论】:

    • 他说customer registers for events 所以客户和事件之间的关系不是 1:1。
    • 是的,没错,客户可以同时进行多个注册
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    相关资源
    最近更新 更多