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; }
}

当然,Business/Client 中的 Phones 属性的问题在于,这会在 Phone 中为 Client 和 Business 创建 FK,这会使 Phone 变得混乱。

所以,我看到另一张海报尝试创建一个手动连接表,但它似乎是面向参与一个关系的多方:

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
} 

我是否应该使用传统的 0 对多关系将 Phone 拆分为 ClientPhones 和 BusinessPhones“正常”实体。如果有人能给我一些关于最干净的建模方法的建议,我将不胜感激。

谢谢!

4

1 回答 1

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
{

}

这将为客户端和商务电话创建一个带有鉴别器列的表。然后,您可以轻松地将客户电话和商务电话分开。

于 2013-04-23T06:21:55.427 回答