是否可以建立外键也是主键的关系?

Is it possible to have a relation where the foreign key is also the primary key?

我在 SQL 数据库中有一个 table,它应该与两个 table 之一有关系,但不能与两者都有关系。

我的经理通过使用 table 竞争对手的 ID 字段作为主键和另外两个 table 的外键解决了这个问题。 None 个 table 具有自动增量 ID。

问题是,当我尝试添加一个新的竞争对手时,它会失败,除非在其他两个 table 中都有一个具有指定 ID 的条目,这与我想要的相反。

这是一个向您展示它是如何完成的插图:

很抱歉,如果之前已发布或回答过此问题。我在搜索时找不到任何东西。

最好的问候 卡亚克

当然,只需在 "dependant properties" 上将密钥设置为外键和主键即可。 Competitor 应该有主键。

public class Competitor
{
  [Key]
  public int Id { get; set; }
}

public class Equestrain
{
  [Key]
  [ForeignKey("Competitor")]
  public int Id{ get; set; }

  public Competitor Competitor { get; set; }
}

public class TeamEquestrain
{
  [Key]
  [ForeignKey("Competitor")]
  public int Id{ get; set; }

  public Competitor Competitor { get; set; }
}

MSDN - Configuring a Required to Optional Relationship (One to Zero or One)

获得此权利的唯一方法是对两个 Equestrian classes 进行子类型化:

public class EquestrianBase
{
    public int Id { get; set; }
    public virtual Competitor Competitor { get; set; }
}
public class Equestrian : EquestrianBase
{
    // Other properties
}

public class TeamEquestrian : EquestrianBase
{
    public int TeamLeaderPersonId { get; set; }
    // Other properties
}

这可能是竞争对手 class:

public class Competitor
{
    public int Id { get; set; }

    public virtual EquestrianBase EquestrianBase { get; set; }

    // Other properties
}

以及基本配置:

modelBuilder.Entity<EquestrianBase>()
            .HasRequired(e => e.Competitor)
            .WithOptional();

使用此模型,您会看到 EF 在 Equestrian table(现在只有一个)中添加了一个 Discriminator 列来区分这两种类型。现在,数据库模式强制要求一名参赛者只有一名两种类型的马术运动员。

如果您想进一步微调每个层次结构 table 的继承架构 ,请查看 here.