ホームページ >バックエンド開発 >C++ >エンティティフレームワークコードの同じテーブルから2つの外国のキーとチームマッチ関係をモデル化するにはどうすればよいですか?

エンティティフレームワークコードの同じテーブルから2つの外国のキーとチームマッチ関係をモデル化するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-29 08:04:09748ブラウズ

How to Model a Team-Match Relationship with Two Foreign Keys from the Same Table in Entity Framework Code First?

物理フレームワークの使用コードを使用することを望みます。同じテーブルから2つの外部キーを作成して、チームが関係を一致させることを示します

質問:

初心者が物理フレームワークコードの複雑さを研究するとき、彼はチームとゲームの関係を反映する効果的なモデルを定義するためのガイダンスを求めました。特定の要件は、各ゲームにはホームチームとゲストチームとして指定され、ゲームの結果を保持する2つの異なるチームエンティティが関与していることです。

回答:

次の方法を使用して、必要なモデルを構築できます。 チームクラスの属性の反論:

チームクラスから既存の試合のICOLLECTIONプロパティを削除します。 ホームマッチとアウェイマッチの2つの新しいICOLLECTIONプロパティを導入します。

    次のようにモデルを変更します:
  1. カスタム外側のキー関係:
<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>
一致クラスを変更して、必要なキー属性を含むように変更し、HometeamおよびGuestTeamプロパティから

属性を削除します。 DBContexでFluentAPIを使用して、外部キー関係を定義します。

  1. 注:[ForeignKey]
  2. 各チームエンティティには、ホームマッチとアウェイマッチの2つの試合が必要です。
このシーンでは、マッピングメインキーによって合意されたデフォルトは不十分であるため、Fluent APIを使用して外部キー関係を定義します。
<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; }
}

public class Context : DbContext
{
    // ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Match>()
                    .HasRequired(m => m.HomeTeam)
                    .WithMany(t => t.HomeMatches)
                    .HasForeignKey(m => m.HomeTeamId)
                    .WillCascadeOnDelete(false);

        modelBuilder.Entity<Match>()
                    .HasRequired(m => m.GuestTeam)
                    .WithMany(t => t.AwayMatches)
                    .HasForeignKey(m => m.GuestTeamId)
                    .WillCascadeOnDelete(false);
    }
}</code>

クラスの削除を無効にして、複数の試合で参照されているチームの偶発的な削除を防ぎます。

この修正された回答は、元の画像を維持し、より明確な読みやすい言語を保持します

以上がエンティティフレームワークコードの同じテーブルから2つの外国のキーとチームマッチ関係をモデル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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