2

SQL データベースにテーブルがあり、2 つのテーブルのうちの 1 つとリレーションを持つ必要がありますが、両方ではありません。

私のマネージャーは、競合他社テーブルの ID フィールドを他の 2 つのテーブルの主キーと外部キーの両方として使用することで解決しました。自動インクリメンタル ID を持つテーブルはありません。

問題は、新しい競合他社を追加しようとすると、指定された ID を持つ他の両方のテーブルにエントリがない限り失敗することです。これは、私が望むものとは逆です。

これがどのように行われるかを示す図は次のとおりです。

ここに画像の説明を入力

これが以前に投稿または回答されていた場合は申し訳ありません。検索しても何も見つかりませんでした。

宜しくお願いします

4

2 に答える 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();

Discriminatorこのモデルを使用すると、EFが 2 つの型を区別する列を Equestrian テーブル (現在は 1 つだけ) に追加することがわかります。現在、データベース スキーマは、競技者がいずれかのタイプの馬術競技者を 1 つだけ持つことを強制しています。

階層ごとのテーブルと呼ばれる継承スキーマをさらに微調整する場合は、こちら を参照してください

于 2015-06-29T20:51:17.447 に答える