ホームページ > バックエンド開発 > C++ > 最初にエンティティフレームワークコードの同じテーブルから2つの外部キーを処理する方法は?

最初にエンティティフレームワークコードの同じテーブルから2つの外部キーを処理する方法は?

Patricia Arquette
リリース: 2025-01-29 07:59:38
オリジナル
197 人が閲覧しました

How to Handle Two Foreign Keys from the Same Table in Entity Framework Code First?

物理フレームワークコードが推奨されています。同じ表から2つの外側キーを処理

物理フレームワークコードを使用してエンティティ間の関係に優先順位を付ける場合、同じテーブルから確立する必要がある2つの外部キーに遭遇する可能性があります。これは初心者にとって特に挑戦的です。

チームとゲームのデータモデルを作成したいとします。希望のコードを使用すると、次のコードを記述できます。

ただし、このコードは異常を引き起こします:

public class Team
{
    [Key]
    public int TeamId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Match> Matches { get; set; }
}

public class Match
{
    [Key]
    public int MatchId { get; set; }

    [ForeignKey("HomeTeam"), Column(Order = 0)]
    public int HomeTeamId { get; set; }
    [ForeignKey("GuestTeam"), Column(Order = 1)]
    public int GuestTeamId { get; set; }

    public float HomePoints { get; set; }
    public float GuestPoints { get; set; }
    public DateTime Date { get; set; }

    public virtual Team HomeTeam { get; set; }
    public virtual Team GuestTeam { get; set; }
}
ログイン後にコピー
この参照関係は、不要なサイクル参照につながります。 [制約名= match_guestteam]

この問題を解決するには、EFが外部キーをマップするためにさまざまな方法を提供する必要があります。効果的な解決策は、

クラスでホームゲームとアウェイゲームのための個別のコレクションを作成することです:

Teamクラスでは、

属性を削除できます。外側のキー属性を定義するだけです。
public class Team
{
    public int TeamId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Match> HomeMatches { get; set; }
    public virtual ICollection<Match> AwayMatches { get; set; }
}
ログイン後にコピー

最後に、<类>クラスでは、MatchおよびForeignKey構成関係を使用する必要があります。

public class Match
{
    public int MatchId { get; set; }

    public int HomeTeamId { get; set; }
    public int GuestTeamId { get; set; }

    public float HomePoints { get; set; }
    public float GuestPoints { get; set; }
    public DateTime Date { get; set; }

    public virtual Team HomeTeam { get; set; }
    public virtual Team GuestTeam { get; set; }
}
ログイン後にコピー
これらの変更により、物理フレームワークコードの優先順位モデルで同じテーブルから2つの外部キーを正常に確立できます。

以上が最初にエンティティフレームワークコードの同じテーブルから2つの外部キーを処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート