是否可以建立外键也是主键的关系?
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.
我在 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.