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

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

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-29 07:59:38173ブラウズ

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

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

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

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

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

<code class="language-csharp">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; }
}</code>
この参照関係は、不要なサイクル参照につながります。 [制約名= match_guestteam]

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

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

Teamクラスでは、

属性を削除できます。外側のキー属性を定義するだけです。
<code class="language-csharp">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; }
}</code>

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

<code class="language-csharp">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; }
}</code>
これらの変更により、物理フレームワークコードの優先順位モデルで同じテーブルから2つの外部キーを正常に確立できます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。