物理フレームワークの使用コードを使用することを望みます。同じテーブルから2つの外部キーを作成して、チームが関係を一致させることを示します
質問:
初心者が物理フレームワークコードの複雑さを研究するとき、彼はチームとゲームの関係を反映する効果的なモデルを定義するためのガイダンスを求めました。特定の要件は、各ゲームにはホームチームとゲストチームとして指定され、ゲームの結果を保持する2つの異なるチームエンティティが関与していることです。
回答:
次の方法を使用して、必要なモデルを構築できます。
チームクラスの属性の反論:
チームクラスから既存の試合のICOLLECTIONプロパティを削除します。
ホームマッチとアウェイマッチの2つの新しいICOLLECTIONプロパティを導入します。
次のようにモデルを変更します:-
-
カスタム外側のキー関係:-
1 2 3 4 5 6 7 8 | 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; }
}
|
ログイン後にコピー
一致クラスを変更して、必要なキー属性を含むように変更し、HometeamおよびGuestTeamプロパティから
属性を削除します。
DBContexでFluentAPIを使用して、外部キー関係を定義します。
- <:>注:
[ForeignKey]
-
各チームエンティティには、ホームマッチとアウェイマッチの2つの試合が必要です。
このシーンでは、マッピングメインキーによって合意されたデフォルトは不十分であるため、Fluent APIを使用して外部キー関係を定義します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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);
}
}
|
ログイン後にコピー
クラスの削除を無効にして、複数の試合で参照されているチームの偶発的な削除を防ぎます。
この修正された回答は、元の画像を維持し、より明確な読みやすい言語を保持します
以上がエンティティフレームワークコードの同じテーブルから2つの外国のキーとチームマッチ関係をモデル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。