2013-04-23 106 views
0

我一直在这个块上绕过几次,所以我采取了一种全新的方法。我想弄清楚是否有可能在多个0对多关系的多方面有一个单一的实体。这就是我想要做的事:实体框架代码第一个 - 共享的一对多实体

客户端有0到许多手机

public class Client 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ClientId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Phone> Phones { get; set; } 
} 

企业有0到许多手机

public class Business 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int BusinessId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Phone> Phones { get; set; } 
} 

这里是电话:

public class Phone 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int PhoneId { get; set; } 

    public string Number { get; set; } 
} 

当然,在商业/客户端Phones属性的问题是,这将创建FK的电话博客户端和业务部门混淆了电话。

于是,我看到了另一个海报尝试创建一个手动连接表,但它似乎是面向参加一个关系的多面:

public class ClientPhone 
{ 
    public int ClientID { get; set; } 
    public int PhoneID { get; set; } 

    public virtual Client Client { get; set; } // One Client 
    public virtual Phone Phone { get; set; } // One Phone 
} 

我应该分头电话成ClientPhones和BusinessPhones“正常'的实体使用传统的0对多关系。如果有人可以给我一些建议,以最简洁的方式来建模,这将非常感激。

谢谢!

回答

0

我觉得你可以每一个分层的方法使用该表型号,

public class Client 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ClientId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<ClientPhone> Phones { get; set; } 
} 


public class Business 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int BusinessId { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<BusinesPhone> Phones { get; set; } 
} 


public class Phone 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int PhoneId { get; set; } 

    public string Number { get; set; } 
} 

public class BusinesPhone:Phone 
{ 

} 

public class ClientPhone:Phone 
{ 

} 

这将为客户和业务电话与鉴别列一个表。然后,您可以轻松分开客户端和商务电话。

+0

哇,是我在想这个!我假设我将派生类添加到DBContext? – cardinalPilot 2013-04-24 13:53:12

+0

是的,这是正确的 – 2013-04-24 14:29:31

+0

额外的想法 - 你指的是能够轻松地分离客户端和商务电话。如果鉴别器列在内部并且无法从POCO访问,你怎么能这样做?如果您无法回答,我会发布一个新问题。 – cardinalPilot 2013-04-30 20:18:13

相关问题