物理フレームワークコードを使用してエンティティ間の関係に優先順位を付ける場合、同じテーブルから確立する必要がある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 サイトの他の関連記事を参照してください。