首頁 >後端開發 >C++ >如何首先在實體框架代碼中的同一表中與兩個外鍵建模團隊匹配關係?

如何首先在實體框架代碼中的同一表中與兩個外鍵建模團隊匹配關係?

Barbara Streisand
Barbara Streisand原創
2025-01-29 08:04:09746瀏覽

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

使用實體框架代碼優先:建立來自同一表的兩個外鍵以表示團隊匹配關係

問題:

一位初學者在學習實體框架代碼優先的複雜性時,尋求指導,以定義一個有效的模型來反映團隊和比賽之間的關係。具體要求是每場比賽都涉及兩個不同的團隊實體,分別指定為主隊和客隊,並保留比賽結果。

解答:

可以使用以下方法構建所需的模型:

重新定義團隊類屬性:

  1. 從 Team 類中移除現有的 Matches 的 ICollection 屬性。
  2. 引入兩個新的 ICollection 屬性:HomeMatches 和 AwayMatches。
  3. 修改模型如下:
<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>

自定義外鍵關係:

  1. 修改 Match 類以包含必要的外鍵屬性,並從 HomeTeam 和 GuestTeam 屬性中移除 [ForeignKey] 屬性。
  2. 在 DbContext 中使用 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>

注意:

  • 每個 Team 實體必須有兩個 Matches 集合,HomeMatches 和 AwayMatches。
  • 使用 Fluent API 來定義外鍵關係,因為在此場景中,映射主鍵的默認約定不足。
  • 禁用級聯刪除以防止意外刪除多個 Matches 引用的 Teams。

This revised answer maintains the original image and uses more concise and clearer language while retaining the core information. The code examples are also formatted for better readability.

以上是如何首先在實體框架代碼中的同一表中與兩個外鍵建模團隊匹配關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn