2

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

我的经理通过使用表 Competor 的 ID 字段作为其他两个表的主键和外键来解决它。所有表都没有自动增量 ID。

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

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

在此处输入图像描述

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

最好的问候卡雅克

4

2 回答 2

2

实现这一点的唯一方法是对两个 Equestrian 类进行子类型化:

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
}

这可能是竞争对手类:

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

    public virtual EquestrianBase EquestrianBase { get; set; }

    // Other properties
}

以及基本配置:

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

使用此模型,您将看到 EFDiscriminator向 Equestrian 表(现在只有一个)添加了一个列,用于区分这两种类型。现在,数据库模式强制要求参赛者只有一个马术运动员的任何一种类型。

如果您想进一步微调继承模式(称为按层次结构表),请查看此处

于 2015-06-29T20:51:17.447 回答
0

当然,只需在“相关属性”上将键设置为 Foreign 和 Primary。竞争者应该有主键。

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 - 配置必需到可选的关系(一对零或一)

于 2015-06-29T14:45:05.603 回答