これを正しく行う唯一の方法は、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();
Discriminator
このモデルを使用すると、EFが 2 つの型を区別する列を Equestrian テーブル (現在は 1 つだけ) に追加することがわかります。現在、データベース スキーマは、競技者がいずれかのタイプの馬術競技者を 1 つだけ持つことを強制しています。
階層ごとのテーブルと呼ばれる継承スキーマをさらに微調整する場合は、こちら を参照してください。