我已经多次绕过这个街区了,所以我采取了新的方法。我想弄清楚是否可能有一个单个实体位于多个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; }
}
A Business拥有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; }
}
当然,Business / Client中的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&#39; normal&#39;使用传统0对多关系的实体。如果有人可以就最简洁的方式给我一些建议,那将非常感激。
谢谢!
答案 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
{
}
这将为客户端和公司电话创建一个带有鉴别器列的表。然后,您可以轻松地分离客户端和商务电话。