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

最初にエンティティフレームワークコードで同じテーブルに複数の外国のキーを処理する方法は?

DDD
リリース: 2025-01-29 07:55:09
オリジナル
543 人が閲覧しました

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

エンティティフレームワークコード最初に:同じ表の複数の外側キーを処理

エンティティフレームワークコアでは、熱狂的な関係をモデル化することが不可欠です。遭遇すると、同じテーブルに複数の外部キーを持つモデルを作成すると、異常を引き起こす可能性があります。

あなたの例では、チームとチームの1つの関係を獲得するためにチームを定義し、1つのホームチームとゲストチームが含まれます。ただし、最初の方法では、サイクルの参照異常がトリガーされます。

この問題を解決するには、hasRequired()およびwithmany()およびwithmany()メソッドのスムーズなAPI構成、およびwithmany()メソッドとonmodelcreating()を使用する必要があります。これは更新されたモデルです:

このモデルでは

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; }
}

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(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Match>()
                    .HasOne(m => m.HomeTeam)
                    .WithMany(t => t.HomeMatches)
                    .HasForeignKey(m => m.HomeTeamId)
                    .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction

        modelBuilder.Entity<Match>()
                    .HasOne(m => m.GuestTeam)
                    .WithMany(t => t.AwayMatches)
                    .HasForeignKey(m => m.GuestTeamId)
                    .OnDelete(DeleteBehavior.Restrict); // or DeleteBehavior.NoAction
    }
}
ログイン後にコピー

チームエンティティには、ホームマッチとアウェイマッチの2つの競技が含まれます。

    マッチエンティティには、HometeamIDとGuestTeamIDがあります。
  • onModelCreating()では、Fluent APIを使用して関係を構成します。これにより、循環の参照を防ぐことができます。
  • 自己参照によって引き起こされるレベルのカプレットからの削除を防ぐために、明示的に
  • (または
  • )に設定されています。
  • OnDelete(DeleteBehavior.Restrict) DeleteBehavior.NoActionこの方法により、EF Coreモデルの同じテーブルに複数の外部キーを確立することができます。 新しいEFコアバージョンではが放棄されていることに注意してください。
  • または
を使用することをお勧めします。

データベース提供プログラムの動作に応じて、関連するレコードが存在しない限り、削除操作を防ぎます。 特定のニーズに依存するものを選択します。 WillCascadeOnDelete(false)

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

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