)からエンティティフレームワークコードの別のテーブル(Team
)への2つの外部キーをマッピングするという課題について説明します。 遭遇する一般的なエラーは、循環的な参照例外です。Match
問題:
とMatch
を使用してHomeTeam
エンティティをモデル化すると、どちらもGuestTeam
テーブルを参照すると、循環的な関係エラーがしばしば発生します。 これは、エンティティフレームワークがデフォルトで1対多数の関係を想定し、循環依存につながるためです。
Team
重要なのは、関係を2つの別々の1対多数の関係を
からから明示的に定義することです。 これは、Team
クラス内に2つのナビゲーションプロパティを作成することで実現されます。
Match
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; } } 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>
のコレクションがあり、試合で各チームの役割を明確に区別していることに注意してください。Team
HomeMatches
AwayMatches
モデル構成(dbcontext):
関係は、クラスの
メソッド:メソッドで明示的に定義する必要があります。
OnModelCreating
この構成は、外部キーを明示的にマッピングし、重要なことに、試合が削除されたときにチームの偶発的な削除を防ぐようにDbContext
を設定します。
以上が最初にエンティティフレームワークコードの同じテーブルから2つの外部キーを適切にマッピングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。