2013-04-23 84 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

相關問題